1. Trước khi bắt đầu
Geospatial Creator trong Unity, được hỗ trợ bởi ARCore và Photorealistic 3D Tiles (Ô 3D siêu thực) của Google Maps Platform, cho phép bạn nhanh chóng tạo và hình dung trải nghiệm thực tế tăng cường (AR) cho một vĩ độ và kinh độ cụ thể, tất cả đều nằm trong Unity Editor. Điều này có thể giúp giảm đáng kể thời gian cần thiết để tạo một cảnh thực tế tăng cường được định vị địa lý cho ứng dụng của bạn. Tuy nhiên, nếu bạn muốn tạo một số trải nghiệm tương tự ở nhiều vị trí thì sao? Bạn cũng có thể thực hiện việc này bằng cách sử dụng API C# trong Geospatial Creator.
Trong lớp học lập trình này, bạn sẽ viết mã C# sử dụng Geospatial Creator và Places API của Google Maps Platform để tạo nhiều trải nghiệm không gian địa lý bằng một mẫu ban đầu. Bạn có thể khám phá và tinh chỉnh các trải nghiệm thu được trong Unity Editor trước khi biên dịch thành một ứng dụng.

Điều kiện tiên quyết
- Kiến thức cơ bản về AR
- Kiến thức cơ bản về ARCore Geospatial API
Kiến thức bạn sẽ học được
- Cách sử dụng các API trong Geospatial Creator để tạo và hình dung một trải nghiệm được định vị địa lý ở nhiều vị trí.
- Cách sử dụng Places API của Nền tảng Google Maps để tìm vị trí của các địa điểm.
- Cách chạy trải nghiệm thực tế tăng cường trên thiết bị.
Bạn cần có
2. Thiết lập môi trường
Để sử dụng Geospatial Creator, bạn cần thiết lập quyền truy cập vào các thành phần Photorealistic 3D Tiles, dịch vụ ARCore trên Google Cloud và Places API của Nền tảng Google Maps.
Thiết lập một dự án trên Google Cloud
Lớp học lập trình này yêu cầu một dự án trên Google Cloud có bật tính năng thanh toán để truy cập vào các API máy chủ của Google. Bạn phải thiết lập thông tin thanh toán cho lớp học lập trình này, nhưng bạn sẽ chỉ bị tính phí nếu một dự án vượt quá hạn mức dịch vụ không mất phí.
Để thiết lập một dự án trong Google Cloud, hãy làm theo các bước sau:
- Tạo một dự án trong Google Cloud Console.

- Trong hộp văn bản Project name (Tên dự án), hãy nhập một tên phù hợp, chẳng hạn như
ARCore Geospatial Project, rồi chọn một vị trí bất kỳ. - Nhấp vào Tạo.
- Trong Google Cloud Console, trên trang chọn dự án, hãy nhấp vào Tạo dự án.
- Xem phần Bật tính năng thanh toán, đồng thời xem giá của Ô 3D siêu thực và giá của Places API (Mới).
Bật Map Tiles API
Map Tiles API cung cấp Ô 3D ảnh thực tế xuất hiện trong Trình chỉnh sửa Unity.
Bật ARCore API
ARCore API trên Google Cloud cho phép bạn truy cập vào ARCore Geospatial API trên thiết bị mục tiêu.
Bật Places API
Places API của Nền tảng Google Maps cho phép bạn lấy dữ liệu vị trí của hơn 200 triệu địa điểm. Bạn sẽ sử dụng dữ liệu này trong lớp học lập trình để tìm các địa điểm có liên quan. API này cung cấp kết quả tìm kiếm và toạ độ địa lý cho các địa điểm.
Tạo khoá API cho dự án của bạn
Để sử dụng phương thức xác thực bằng khoá API nhằm xác thực ứng dụng của bạn với các dịch vụ Google Cloud từ xa, hãy làm theo các bước sau:
- Trong Google Cloud Console, trong phần API và dịch vụ, hãy chọn Thông tin xác thực.
- Ở đầu trang, hãy nhấp vào Tạo thông tin xác thực rồi chọn Khoá API.
- Ghi lại khoá vì bạn sẽ cần khoá này cho các bước tiếp theo.
Thiết lập phần mềm
Để bắt đầu sử dụng phần mềm Geospatial Creator, hãy làm theo các bước sau:
- Sao chép kho lưu trữ này.
- Tải Unity Hub xuống rồi dùng công cụ này để cài đặt Unity phiên bản 2022.3. Đảm bảo rằng bạn đang cài đặt các công cụ xây dựng không bắt buộc cho Android hoặc iOS.
- Trong Unity Hub, hãy nhấn vào Add > Add project from disk (Thêm > Thêm dự án từ ổ đĩa).
- Trong bảng Hierarchy (Hệ thống phân cấp), hãy chọn AR Geospatial Creator Origin (Nguồn gốc của AR Geospatial Creator).
- Trong hộp văn bản Google Maps Tile API Key (Khoá API của ô Google Maps), hãy chèn khoá API rồi nhấn
Enter(hoặcreturntrên macOS).
- Trong Edit > Project Settings > XR Plug-in Management > ARCore Extensions (Chỉnh sửa > Cài đặt dự án > Quản lý trình bổ trợ XR > Tiện ích ARCore), hãy sử dụng phương thức xác thực Khoá API cho Android hoặc iOS và chèn Khoá API.
- Trong File > Build Settings (Tệp > Cài đặt bản dựng), hãy chuyển nền tảng mục tiêu sang Android hoặc iOS.
3. Tạo điểm neo đầu tiên
Trong lớp học lập trình này, bạn sẽ tạo một neo thực tế tăng cường có thể dùng ở nhiều vị trí. Bạn có thể dùng các thư viện công cộng ở San Francisco, California làm ví dụ, nhưng bạn có thể dùng các địa điểm gần bạn.
Giới thiệu về thành phần Nguồn gốc của Geospatial Creator
Mỗi cảnh Unity được tạo bằng Geospatial Creator đều cần có chính xác một Geospatial Creator Origin. Đối tượng trò chơi này là điểm tham chiếu để chuyển đổi các giá trị vĩ độ, kinh độ và độ cao trong thế giới thực thành toạ độ trò chơi Unity.
Dự án mẫu chứa một Nguồn gốc của nhà sáng tạo không gian địa lý, sử dụng Cesium để kết xuất các ô 3D siêu thực trong chế độ xem Scene của Trình chỉnh sửa và cho phép bạn hình dung chính xác vị trí xuất hiện nội dung thực tế tăng cường của mình trên thế giới.
Di chuyển tâm
Di chuyển điểm gốc của Geospatial Creator đến vĩ độ và kinh độ của chi nhánh thư viện chính ở San Francisco.
Để sử dụng chế độ tích hợp sẵn của Geospatial Creator với Places API nhằm tự động di chuyển gốc đến vị trí chính xác, hãy làm theo các bước sau:
- Trong bảng Hierarchy (Hệ thống phân cấp), hãy chọn đối tượng trò chơi Geospatial Creator Origin (Nguồn gốc của Geospatial Creator).
- Trong bảng Inspector (Trình kiểm tra), hãy nhấp vào Search for Location (Tìm kiếm vị trí).
- Trong hộp thoại tìm kiếm, hãy nhập
San Francisco Public Library. Kết quả đầu tiên phải là 100 Larkin Street. - Nhấp vào Áp dụng cho các đối tượng để áp dụng kết quả tìm kiếm cho nguồn. Bạn sẽ thấy vĩ độ và kinh độ của điểm xuất phát được cập nhật thành toạ độ mới.

Thêm một điểm neo Geospatial Creator vào cảnh
Giờ đây, khi đã có một Origin, hãy thêm một neo Geospatial Creator bằng cách sử dụng GameObject > XR > AR Geospatial Creator Anchor. Theo mặc định, điểm neo sẽ nằm cùng vị trí với điểm gốc.
Sử dụng điểm neo này để đặt nội dung thực tế tăng cường 3D. Mô hình 3D của một cuốn sách có trong dự án mẫu.
Để đặt cuốn sách vào cảnh, hãy làm theo các bước sau:
- Trong bảng điều khiển Dự án, hãy kéo mô hình Book (Sách) vào ngăn Editor (Trình chỉnh sửa).
- Trong bảng Hierarchy (Hệ thống phân cấp), hãy đảm bảo rằng Book (Sách) là thành phần con của điểm neo mà bạn đã tạo trước đó. Mọi đối tượng trò chơi con của neo Geospatial Creator sẽ được đặt tương ứng với neo.
- Trong bảng Phân cấp, hãy chọn Sách. Đặt giá trị vị trí của đối tượng này thành 0, 0, 0.

Khi xem mô hình này ở chế độ xem Trình chỉnh sửa, rõ ràng là có vấn đề: Độ cao mặc định của điểm neo thấp hơn bề mặt mái của thư viện, trong khi lẽ ra điểm neo phải nằm cao hơn bề mặt đó.
Mặc dù bạn có thể di chuyển đối tượng trong trình chỉnh sửa để tìm độ cao WGS84 gần đúng, nhưng bạn nên định cấu hình Neo không gian địa lý dưới dạng Neo trên mái nhà trong trường hợp này để độ cao của neo được tự động cố định so với mái nhà của cấu trúc mà neo nằm phía trên.
- Để làm việc này, hãy mở bảng điều khiển của đối tượng neo và đặt thuộc tính
Altitude TypethànhRooftop.

Sau khi thực hiện việc này, xin lưu ý rằng độ cao của điểm neo sẽ không thay đổi trong chế độ xem Trình chỉnh sửa. Lý do là vì độ cao của neo được xác định trong thời gian chạy khi neo được phân giải cho các neo trên Sân thượng và Địa hình. Để hình dung điểm neo trên nóc nhà ở chế độ xem Scene, bạn có thể sử dụng nút Snap To Tile (Chụp nhanh vào ô). Thao tác này đặt độ cao của neo sao cho phù hợp với ô trong khung hiển thị Scene, trong khi không ảnh hưởng đến độ cao của neo đã phân giải trong thời gian chạy.
- Để mô hình nổi phía trên nóc thư viện thay vì nằm trên nóc, hãy thay đổi tham số
Altitude relative to rooftopthành 15 mét phía trên nóc.
Giờ đây, mô hình này đang trôi nổi một cách đẹp mắt trên thư viện!

Dự án của bạn hiện có một cảnh AR không gian địa lý hoàn chỉnh, bao gồm tất cả các thành phần hệ thống AR cần thiết, một Nguồn gốc của Geospatial Creator và một neo có mô hình được đính kèm.
Tiếp theo, hãy tạo các neo trùng lặp ở các vị trí khác trong thư viện.
4. Tìm vị trí neo mới bằng Places API
Places API của Nền tảng Google Maps cho phép bạn lấy dữ liệu vị trí của hơn 200 triệu địa điểm. Trong lớp học lập trình này, bạn sẽ sử dụng API này để tìm các chi nhánh khác của thư viện công cộng ở San Francisco và sử dụng những kết quả đó để tạo một điểm neo Geospatial Creator cho 10 kết quả tìm kiếm tiếp theo.
- Để bắt đầu, hãy nhấp vào Assets > Scripts > Editor (Thành phần > Tập lệnh > Trình chỉnh sửa), sau đó mở tệp "
AnchorDuplicator.cs". Tệp này cung cấp một số mã nguyên mẫu giúp bạn bắt đầu sử dụng Places API và phân tích cú pháp kết quả của API này.
Xác thực bằng Places API
- Tìm dòng sau trong lớp
AnchorDuplicator:private const string API_KEY = "<YOUR_API_KEY_HERE>"; - Thay thế <YOUR_API_KEY_HERE> bằng khoá mà bạn nhận được trong các bước thiết lập.
Truy vấn Places API cho một cụm từ tìm kiếm
Sau khi hoàn tất quá trình thiết lập uỷ quyền Places API, bạn có thể viết mã khởi tạo một yêu cầu POST.
- Để làm như vậy, hãy tìm phương thức
CreatePlacesRequestvà sử dụng định nghĩa phương thức sau: Giờ đây, khi phương thứcstring postBody = "{ \"textQuery\": \"" + searchTerm + "\", " + " \"locationBias\": { \"circle\": { " + " \"center\": { \"latitude\": " + lat + ", \"longitude\": " + lon + " }, " + " \"radius\": 10000 }" + " }" + "}"; string url = "https://places.googleapis.com/v1/places:searchText"; UnityWebRequest request = UnityWebRequest.Post(url, postBody, "application/json"); request.SetRequestHeader("X-Goog-Api-Key", apiKey); request.SetRequestHeader("X-Goog-FieldMask", "places.displayName,places.location"); return request;CreatePlacesRequestđược gọi, một yêu cầu sẽ được gửi để tìm kiếmsearchTermtrong một vòng tròn có tâm làlatvàlon.
Kiểm thử công việc của bạn
Trước khi tiếp tục, bạn cần xác minh rằng các lệnh gọi đến Places API đều thành công.
- Chạy các hàm trong Trình chỉnh sửa Unity:
- Trong Google AR Codelab, hãy nhấp vào Run Places Request (Chạy yêu cầu về địa điểm).
- Mở bảng điều khiển Unity. Bạn sẽ thấy kết quả xuất hiện.

5. Thêm neo vào các địa điểm theo phương thức lập trình
Giờ đây, sau khi xác minh rằng Places API tìm thấy kết quả, hãy tạo các neo mới của Geospatial Creator tại mỗi vị trí do kết quả chỉ định.
Tạo một mục trong trình đơn
- Trong lớp
AnchorDuplicator, hãy tìm phương thứcCreateNewAnchorsFromPlacesvà sử dụng định nghĩa phương thức sau: Mục trình đơn này kiểm tra một yêu cầu đã bắt đầu trước đó và sử dụngif (_places == null) { Debug.LogError("Cannot create anchors: Places has not been initialized."); return; } // You start with only one anchor in the scene, which you want to copy: var prototypeAnchorObject = GameObject .FindObjectOfType<ARGeospatialCreatorAnchor>() .gameObject; foreach (var place in _places) { var newAnchorObject = GameObject.Instantiate(prototypeAnchorObject); var anchor = newAnchorObject.GetComponent<ARGeospatialCreatorAnchor>(); anchor.Latitude = place.location.latitude; anchor.Longitude = place.location.longitude; newAnchorObject.name = place.displayName.text; }ARGeospatialCreatorAnchorđầu tiên trong cảnh của bạn làm nguyên mẫu để tạo các neo, mỗi neo cho một địa điểm trong kết quả của Places API. - Sử dụng mục trình đơn Create New Anchors from Places Response (Tạo neo mới từ phản hồi về địa điểm) trong Google AR Codelab để tạo các neo.
- Bạn sẽ thấy nhiều điểm neo xuất hiện trong ngăn Hierarchy (Hệ thống phân cấp).
Xác minh vị trí của điểm neo
Để xác minh rằng tất cả các thành phần đều được cố định ở đúng vị trí trước khi bạn chạy ứng dụng, hãy làm theo các bước sau:
- Nhấp vào một điểm neo đã thêm trong ngăn Hierarchy (Hệ thống phân cấp).
- Nhấn phím F.
- Kiểm tra điểm neo trong khung hiển thị
Scene. - Nếu một điểm neo không ở đúng vị trí, hãy nhấp vào Snap to Tile (Liên kết với ô) hoặc thay đổi các giá trị
Latitude,LongitudehoặcEditor Override Altitudetheo cách thủ công.
6. Xem thành phần ở chế độ thực tế tăng cường
Để xem thành phần ở chế độ thực tế tăng cường trên thiết bị Android hoặc iOS có hỗ trợ ARCore, hãy làm theo các bước sau:
- Nhấp vào File > Build Settings (Tệp > Cài đặt bản dựng), rồi chọn nền tảng bản dựng Android hoặc iOS.
- Nhấp vào Chuyển nền tảng.
- Đảm bảo rằng thiết bị phát triển của bạn đã được kết nối và định cấu hình để phát triển.
- Nhấp vào Build and run (Tạo và chạy).
- Xác nhận rằng ứng dụng chạy trên thiết bị của bạn.
- Ghé thăm những địa điểm mà bạn đã neo nội dung. Nếu bạn không thay đổi các ví dụ, thì các vị trí đó là thư viện công cộng ở San Francisco.

7. Kết luận
Xin chúc mừng! Bạn đã viết một ứng dụng Unity sử dụng Geospatial Creator và Places API của Google Maps Platform để tạo nhiều trải nghiệm không gian địa lý bằng một mẫu ban đầu. Chúng tôi hy vọng bạn có thể sử dụng kiến thức này để mở rộng phạm vi tiếp cận của nội dung do bạn tạo trong Geospatial Creator!