ARCore Geospatial Creator cho Unity cho phép bạn xem trước nội dung Dựa trên vị trí địa lý trong Unity Editor bằng cách hiển thị dữ liệu của Google Maps ở định dạng ô 3D mới. Điều này giúp bạn hình dung được vị trí đặt nội dung trong thế giới thực khi bạn đang tạo ứng dụng.
Geospatial Creator có trong ARCore Extensions cho AR Foundation. Hướng dẫn khởi động nhanh này sẽ hướng dẫn bạn cách sử dụng Geospatial Creator trong Unity để thêm nội dung AR không gian địa lý vào ứng dụng mẫu không gian địa lý ARCore.
Nếu có một ứng dụng hiện tại mà bạn muốn dùng thay vì GeospatialSample, trước tiên, bạn cần làm theo Hướng dẫn dành cho nhà phát triển không gian địa lý cho Unity. Sau khi bạn định cấu hình ứng dụng để sử dụng Geospatial API, hãy chuyển đến bước Thêm các phần phụ thuộc bắt buộc bên dưới rồi tiếp tục từ đó.
Điều kiện tiên quyết
Làm theo hướng dẫn trong bài viết "Bắt đầu sử dụng ARCore Extensions cho AR Foundation" để định cấu hình môi trường Unity nhằm tạo ra trải nghiệm AR.
Mặc dù ARCore Extensions hỗ trợ các phiên bản Unity cũ hơn, nhưng Geospatial Creator yêu cầu Unity 2021.3 trở lên.
Uỷ quyền API
Bạn cần thiết lập quyền truy cập API để sử dụng ARCore Geospatial API và Google Map Tiles API.
Google Map Tiles API
Map Tiles API cung cấp một bản trình bày 3D, chân thực về các vị trí được hỗ trợ. Chúng ta sẽ sử dụng các ô này trong Unity Editor để xem trước khu vực xung quanh cảnh thực tế tăng cường.
Hãy xem trang Map Tiles API để bật API và tìm hiểu thêm về Map Tiles.
ARCore Geospatial API
Ứng dụng của bạn sẽ dùng ARCore Geospatial API trong thời gian chạy để tạo và tương tác với Geospatial Anchor.
Để bật Geospatial API, hãy thiết lập ARCore API trong ứng dụng của bạn. Bạn có thể sử dụng phương thức uỷ quyền Không dùng khoá (nên dùng) hoặc Khoá API.
Mở rộng ứng dụng mẫu không gian địa lý
Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn cách sử dụng Geospatial Creator để thêm nội dung không gian địa lý vào ứng dụng mẫu không gian địa lý ARCore.
Định cấu hình Mẫu không gian địa lý
Trước tiên, hãy làm quen với ứng dụng mẫu ARCore Geospatial. Trong một dự án Unity mới, hãy mở Unity Package Manager (Trình quản lý gói Unity) rồi chọn gói ARCore Extensions (Tiện ích ARCore). Trong bảng chi tiết của Trình quản lý gói, hãy mở rộng Samples (Mẫu) rồi nhập Geospatial Sample (Mẫu không gian địa lý) vào dự án Unity.
Trước khi chạy ứng dụng, bạn phải bật ARCore và chức năng Không gian địa lý trong dự án của mình. Sử dụng Edit > Project Settings... > XR Plug-in Management (Quản lý trình bổ trợ XR). Đánh dấu vào các hộp thích hợp để bật trình cung cấp trình bổ trợ ARCore cho Android và/hoặc trình cung cấp trình bổ trợ ARKit cho iOS.
Sau đó, trong phần Edit > Project Settings... (Chỉnh sửa > Cài đặt dự án...) > XR Plug-in Management (Quản lý trình bổ trợ XR), hãy mở bảng điều khiển ARCore Extensions (Tiện ích ARCore). Đảm bảo bạn đã đánh dấu vào "Không gian địa lý" (bạn chưa cần bật Geospatial Creator), rồi nhập thông tin đăng nhập API. Hãy xem tài liệu "Bật API Không gian địa lý Unity" cho Android và iOS để biết thêm thông tin chi tiết.
Có một số chế độ cài đặt Trình phát dành riêng cho nền tảng khác mà mọi ứng dụng Unity sử dụng ARCore đều phải có. Hãy xem phần Định cấu hình chế độ cài đặt trình phát trong tài liệu của chúng tôi để biết những thay đổi bắt buộc.
Tại thời điểm này, không có đối tượng trò chơi nào trong cảnh của bạn ngoài những đối tượng cần thiết để chạy Mẫu không gian địa lý. Đây là thời điểm thích hợp để tạo và chạy ứng dụng. Nếu được định cấu hình đúng cách, trong thời gian chạy, ứng dụng sẽ hiển thị chế độ xem camera của thiết bị. Khi bạn di chuyển, độ chính xác về không gian địa lý xuất hiện ở đầu màn hình sẽ bắt đầu cải thiện. Bằng cách nhấn vào màn hình, bạn sẽ tạo ra các Geospatial Anchors (Điểm neo không gian địa lý) sẽ duy trì ở vị trí ban đầu trong khi bạn di chuyển.
Tiếp theo, chúng ta sẽ xem cách sử dụng Geospatial Creator để tạo và trực quan hoá nội dung thực tế tăng cường phức tạp ngay trong Unity Editor. Nội dung này sẽ xuất hiện trong ứng dụng của bạn tại các vị trí có vĩ độ / kinh độ cụ thể trên thế giới.
Thêm các phần phụ thuộc bắt buộc
Geospatial Creator sử dụng một gói Unity của bên thứ ba có tên là Cesium để kết xuất các ô Google Maps trong cửa sổ Cảnh của Trình chỉnh sửa Unity. Trước khi bật các tính năng của Geospatial Creator, hãy thêm gói Cesium vào dự án của bạn.
Bạn nên cài đặt phiên bản mới nhất của gói Cesium cho Unity trên trang GitHub của Cesium:
- Tải phiên bản mới nhất của
.tgzđược biên dịch sẵn của Cesium cho Unity xuống từ trang Phát hành trên GitHub của họ. Phiên bản hiện tại được đề xuất của gói Cesium cho Unity là 1.1.0. - Mở Unity Package Manager bằng cách nhấp vào trình đơn "Window" (Cửa sổ) của Unity, sau đó chọn "Package Manager" (Trình quản lý gói).
- Nhấp vào biểu tượng "+" rồi chọn "Add package from tarball" (Thêm gói từ tệp tarball).
- Chọn tệp .tgz Cesium cho Unity mà bạn đã tải xuống ở Bước 1.
- Bạn có thể được nhắc cài đặt các phần phụ thuộc bổ sung, chẳng hạn như Text Mesh Pro.

Bật Geospatial Creator
Giờ đây, bạn đã sẵn sàng bật Geospatial Creator:
- Trong hộp thoại Build Settings (Cài đặt bản dựng), hãy nhớ chọn nền tảng là "Android" hoặc "iOS". Các tính năng của Geospatial Creator hiện không được cung cấp cho các nền tảng khác.
- Chuyển đến Project Settings (Cài đặt dự án) > XR Plug-in Management (Quản lý trình bổ trợ XR) > ARCore Extensions (Tiện ích ARCore).
- Nếu bạn chưa đặt(các) khoá API ARCore Android và/hoặc iOS ở bước trước, hãy nhớ thực hiện việc này ngay bây giờ.
- Bật cả nút bật/tắt "Không gian địa lý" và "Geospatial Creator". Sau khi bạn nhấp để bật nút Geospatial Creator, một trình hướng dẫn không theo phương thức sẽ xuất hiện để xác nhận rằng dự án của bạn tương thích với Geospatial Creator.
- Nhấp vào "Hoàn tất" trên trình hướng dẫn.
Sau khi bạn hoàn tất trình hướng dẫn, Unity sẽ kích hoạt quá trình biên dịch các tập lệnh của bạn. Chờ quá trình biên dịch lại hoàn tất rồi mới tiếp tục. (Nếu nền tảng bạn chọn không phải là "Android" hoặc "iOS", hãy chuyển sang một trong hai nền tảng đó ngay bây giờ.)
Thêm Nguồn gốc của nhà sáng tạo không gian địa lý bằng các ô bản đồ
Cảnh của bạn cần có chính xác một đối tượng "Geospatial Creator Origin". Đối tượng này được dùng làm điểm tham chiếu để chuyển đổi các giá trị vĩ độ, kinh độ và độ cao thực tế thành toạ độ trò chơi Unity.
Để thêm một Geospatial Creator Origin vào cảnh, hãy chọn Game Object > XR > Geospatial Creator Origin. Đối tượng mới tạo yêu cầu một thông tin tham chiếu địa lý, liên kết một vĩ độ, kinh độ và độ cao cụ thể với vị trí của nguồn gốc theo toạ độ trong trò chơi. Trong ngăn Inspector (Trình kiểm tra) của Geospatial Creator Origin, hãy thêm thông tin tham chiếu địa lý bằng cách nhấp vào nút Add Cesium Georeference Component (Thêm thành phần tham chiếu địa lý Cesium).

Ngoài việc là điểm tham chiếu cho các đối tượng thực tế tăng cường, Cesium Georeference còn thêm một đối tượng Cesium 3D Tileset vào cảnh. Đối tượng này sẽ kết xuất các ô Google Maps trong Chế độ xem cảnh của Trình chỉnh sửa, cho phép bạn hình dung chính xác vị trí nội dung thực tế tăng cường của bạn sẽ xuất hiện trên thế giới. Có một trường trong trình kiểm tra Geospatial Creator Origin (Nguồn của Geospatial Creator) để thêm khoá API Map Tiles mà bạn đã thiết lập trước đó. Sau khi đặt khoá này, bạn sẽ thấy các ô bản đồ tải trong khung hiển thị Cảnh.
Bây giờ, hãy thay đổi các trường vĩ độ, kinh độ và chiều cao để đặt gần vị trí bạn muốn nội dung thực tế tăng cường xuất hiện trong ứng dụng.
Giờ đây, Scene View (Chế độ xem cảnh) trong Trình chỉnh sửa sẽ hiển thị các ô bản đồ tại vĩ độ và kinh độ được chỉ định của nguồn gốc. Trong thời gian chạy, chúng tôi giả định rằng ứng dụng của bạn sẽ sử dụng Camera thực tế tăng cường, vì vậy, Geospatial Creator đã định cấu hình đối tượng Cesium 3D Map Tileset bằng thẻ "EditorOnly". Do đó, các ô này sẽ không được tải xuống hoặc kết xuất trong thời gian chạy trong trò chơi của bạn. Bạn có thể thay đổi chế độ này trong trình kiểm tra của đối tượng Cesium3DTileset. Để tìm hiểu thêm về Georeference và 3D Tileset GameObjects của Cesium, hãy tham khảo tài liệu về Cesium cho Unity.
Thêm và đặt một Neo Geospatial Creator
Giờ đây, bạn đã sẵn sàng đặt nội dung thực tế tăng cường vào cảnh của mình! Nhấp vào GameObject > XR > Geospatial Creator Anchor (Đối tượng trò chơi > XR > Geospatial Creator Anchor) để thêm một neo vào hệ thống phân cấp cảnh của bạn. Trong trình kiểm tra Anchor, bạn có thể chỉ định chính xác vĩ độ, kinh độ và chiều cao. Biến đổi của đối tượng sẽ ngay lập tức cập nhật thành vị trí chính xác trong cảnh của bạn và bạn có thể thấy chính xác vị trí mà đối tượng sẽ xuất hiện trên thế giới.

Khi bạn tinh chỉnh vĩ độ và kinh độ của điểm neo, hãy chọn một địa điểm ở gần để bạn có thể xác thực rằng điểm neo đó nằm ở đúng vị trí trong thời gian chạy. Khi đặt độ cao cho một Geospatial Creator Anchor, bạn có 3 lựa chọn:
- Địa hình đặt điểm neo ở ngang mặt đất tại vĩ độ và kinh độ đã chỉ định. Cấp độ mặt đất được xác định trong thời gian chạy bằng Hệ thống định vị trực quan. Nếu bạn mới sử dụng Geospatial API của ARCore, thì "Địa hình" là một lựa chọn phù hợp vì neo sẽ được phân giải trực tiếp trên mặt đất với độ chính xác theo phương thẳng đứng cao. Trường "Độ lệch độ cao" cho phép bạn đặt vị trí của điểm neo ở phía trên hoặc phía dưới mặt đất một khoảng cố định, tính bằng mét. Ví dụ: việc chỉ định độ lệch là "1.0" sẽ khiến neo "nổi" lên 1 mét so với địa hình.
- Trên nóc nhà đặt điểm neo tương ứng với đỉnh của mọi cấu trúc tại vĩ độ và kinh độ đã cho. Giống như điểm neo địa hình, trường "Độ lệch độ cao" cho phép bạn di chuyển điểm neo lên hoặc xuống so với vị trí mái nhà, tính bằng mét.
- WGS84 đặt điểm neo ở một độ cao tuyệt đối cụ thể, tính bằng mét, dựa trên hệ toạ độ WGS84. Việc đặt đối tượng theo cách này có thể đòi hỏi một số lần thử và sai, vì chiều cao "0" trong WSG84 không nhất thiết cho biết mực nước biển trung bình và có thể không khớp với độ cao của GPS. Ngoài ra, mặc dù vĩ độ và kinh độ của các ô 3D được kết xuất có độ chính xác cao, nhưng việc cố gắng đặt đối tượng ở ngang mặt đất bằng cách sử dụng các ô 3D làm điểm tham chiếu có thể dẫn đến sai số về chiều cao lên đến vài mét.
Để tìm hiểu thêm về các loại Neo không gian địa lý ARCore, hãy tham khảo Hướng dẫn dành cho nhà phát triển không gian địa lý.
Cả điểm neo địa hình và điểm neo trên mái nhà đều có trường Độ cao WGS84. Giá trị này chỉ được dùng ở chế độ Trình chỉnh sửa để đặt chiều cao của đối tượng trong Chế độ xem cảnh. Chiều cao của địa hình và mái nhà chỉ được xác định trong thời gian chạy, vì vậy trường Độ cao WGS84 cho phép bạn hình dung điểm neo ở một độ cao cụ thể trong khi phát triển ứng dụng. Trường Độ cao WGS84 sẽ bị bỏ qua trong thời gian chạy đối với các điểm neo trên địa hình và mái nhà.
Thêm Hình học vào điểm neo
Nếu tạo và chạy ứng dụng ngay bây giờ, bạn sẽ không thấy điểm neo trong ứng dụng hỗ trợ AR. Đó là vì không có hình học nào được đính kèm vào điểm neo. Hãy thêm một đối tượng 3D cơ bản vào điểm neo: Trong hệ thống phân cấp cảnh, hãy nhấp chuột phải vào đối tượng AR Geospatial Creator Anchor (Điểm neo do AR Geospatial Creator tạo). Trong trình đơn theo bối cảnh, hãy chọn 3D Object (Đối tượng 3D) > Cube (Khối lập phương). Bạn sẽ thấy một hình lập phương màu xám trong khung cảnh dưới dạng một phần tử con của điểm neo. Nếu quyết định di chuyển vị trí hoặc hướng xoay của đối tượng trong Trình chỉnh sửa, bạn nên di chuyển đối tượng Anchor gốc thay vì đối tượng Cube nguyên thuỷ con. Điều này sẽ giúp giảm lỗi trong quá trình dịch từ vĩ độ / kinh độ sang toạ độ trong trò chơi.

Tất nhiên, bạn cũng có thể thêm các thành phần và phần tử con tuỳ ý và hình học phức tạp hơn vào điểm neo.
Tạo và chạy ứng dụng
Đã đến lúc bạn nhìn thấy điểm neo trong thế giới thực! Hãy thử tạo và chạy ứng dụng của bạn, sau đó di chuyển đến vị trí mà bạn dự kiến sẽ thấy hình lập phương. Có phải ở đó không? Xin chúc mừng, bạn đã sẵn sàng tạo ra những trải nghiệm AR phức tạp hơn bằng Geospatial Creator!
Nếu bạn gặp vấn đề, hãy xem Hướng dẫn khắc phục sự cố.
Giờ là thời điểm thích hợp để thêm các Neo không gian địa lý AR khác có hình học khác nhau. Hãy thử nghiệm nhiều điểm neo trên nóc nhà và địa hình cũng như độ lệch của chúng. Thêm tập lệnh để tạo ảnh động hoặc cho phép tương tác với các đối tượng.
Tìm hiểu về Neo Geospatial Creator và lớp ARGeospatialAnchor
Khi tạo các trải nghiệm AR phức tạp và có tính tương tác, bạn nên hiểu rõ mối quan hệ giữa Geospatial Creator Anchors và lớp ARGeospatialAnchor C# của ARCore:
Bạn chỉ có thể tạo ARGeospatialAnchor trong thời gian chạy bằng cách gọi một trong các hàm trên ARAnchorManager và bạn chỉ có thể tạo các hàm này sau khi phiên thực tế tăng cường ổn định. Bạn có thể coi Geospatial Creator Anchor (Điểm neo của nhà sáng tạo không gian địa lý) là một phần giữ chỗ trong cảnh của bạn, chờ phiên thực tế tăng cường sẵn sàng phân giải các đối tượng ARGeospatialAnchor.
Sau khi phiên hoạt động sẵn sàng, phần giữ chỗ sẽ tự động gọi ARAnchorManager để tạo và phân giải ARGeospatialAnchor.
Ngay sau khi neo thời gian chạy được phân giải, Geospatial Creator Anchor trong hệ phân cấp cảnh sẽ tự động đính kèm dưới dạng một phần tử con vào GameObject mới.
Điều này có nghĩa là mọi thành phần hoặc phần tử con của Geospatial Creator Anchor sẽ trở thành thành phần con hoặc phần tử cháu của ARGeospatialAnchor GameObject mới. Ví dụ: transform của một hình học nguyên thuỷ được đính kèm vào Geospatial Creator Anchor sẽ kế thừa từ transform của ARGeospatialAnchor và do đó sẽ được đặt ở vị trí dự kiến trong phiên AR thời gian chạy.
Nếu cần xác định ARGeospatialAnchor GameObject cụ thể trong thời gian chạy, bạn có thể tìm kiếm trong cảnh các đối tượng có thuộc tính name khớp với neo được tạo bằng Geospatial Creator. Nếu phiên thực tế tăng cường được khởi tạo, parent của đối tượng đó sẽ là đối tượng ARGeospatialAnchor tương ứng.
Khắc phục sự cố
Tại sao điểm neo của tôi lại di chuyển?
Bạn có thể nhận thấy rằng, đặc biệt là khi ứng dụng khởi chạy lần đầu tiên, neo có thể xuất hiện và "trôi" từ từ hoặc thậm chí đột ngột nhảy vài mét. Điều này xảy ra khi phiên VPS vẫn đang xác định và tinh chỉnh vị trí chính xác của camera. Khi độ chính xác theo phương ngang và phương dọc được cải thiện qua nhiều khung hình, điểm neo sẽ được vẽ lại ở vị trí chính xác hơn, tạo ảo giác về chuyển động. Bạn có thể muốn kết xuất đối tượng theo cách khác (hoặc không kết xuất) cho đến khi độ chính xác của vị trí đạt đến một ngưỡng nhất định. Để làm như vậy, bạn có thể truy vấn thuộc tính ARCoreEarthManager.CameraGeospatialPose để xác định độ chính xác cho bản cập nhật khung hình hiện tại.
Tại sao điểm neo của tôi xuất hiện ở độ cao không chính xác?
Khi sử dụng loại độ cao "Thủ công" cho Neo không gian địa lý, độ cao của neo sẽ được đặt (tính bằng mét) theo WGS84. Tại một vị trí nhất định, có thể có sự chênh lệch lên đến vài mét giữa độ cao biểu kiến của mặt đất xuất hiện trong các ô bản đồ và độ cao thực tế của mặt đất do Hệ thống định vị trực quan (VPS) của Google báo cáo. Nếu một Geospatial Anchor (Điểm neo không gian địa lý) xuất hiện ở vị trí không chính xác trong thời gian chạy, bạn nên xác thực chiều cao VPS trực tiếp bằng cách sử dụng lớp gỡ lỗi trong ứng dụng mẫu. Sau đó, bạn có thể thay đổi độ cao trong Trình chỉnh sửa Unity để khớp với chiều cao VPS đã biết tại vị trí đó.
Các ô bản đồ không hiển thị đúng cách trong Chế độ xem cảnh của Trình chỉnh sửa
Nếu Cesium3DTileset có vẻ đang tải các ô nhưng chúng được kết xuất bằng màu đỏ tươi trong khung cảnh, hãy thêm gói Shader Graph của Unity vào dự án của bạn. Cesium yêu cầu gói này, mặc dù các dự án sử dụng trình kết xuất tích hợp của Unity không bao gồm gói này theo mặc định.
Để thêm Shader Graph, hãy mở Unity Package Manager (Trình quản lý gói Unity) (Window > Package Manager (Cửa sổ > Trình quản lý gói)). Đảm bảo bạn đang duyệt xem các gói có trong Unity Package Registry (Sổ đăng ký gói Unity) bằng cách chọn "Packages: Unity Registry" (Gói: Sổ đăng ký Unity) trong trình đơn thả xuống ở đầu cửa sổ Package Manager (Trình quản lý gói). Tìm gói com.unity.shadergraph và cài đặt phiên bản mới nhất. Sau khi gói tải, các ô 3D sẽ tải lại và hiển thị đúng cách trong Chế độ xem cảnh.
Ứng dụng hiển thị màn hình đen trong thời gian chạy thay vì chế độ xem camera
Theo mặc định, Universal Rendering Pipeline (URP) của Unity không được định cấu hình cho Camera thực tế tăng cường. Nếu thấy màn hình đen trong thời gian chạy thay vì đầu ra của camera, bạn sẽ cần thêm AR Background Renderer Feature vào mỗi Trình kết xuất URP trong cảnh của mình.

Để thêm tính năng này, hãy tìm "renderer" trong dự án của bạn. Đối với mỗi đối tượng URP Renderer, hãy nhấp vào nút "Add Renderer Feature" (Thêm tính năng của trình kết xuất) trong Inspector (Trình kiểm tra) rồi thêm AR Background Renderer (Trình kết xuất nền AR).
Tại sao các Neo được đặt ở xa vị trí ban đầu có vẻ như được đặt không chính xác?
Việc chuyển đổi từ toạ độ WGS84 sang toạ độ trò chơi Unity có thể bị lỗi do độ chính xác của phép tính dấu phẩy động. Bạn có thể giảm thiểu lỗi này bằng cách đảm bảo gốc của bạn ở gần các điểm neo thực tế tăng cường. Khoảng cách trên 20 km có thể dẫn đến thông tin không chính xác. Bạn nên sử dụng nhiều cảnh, với một điểm neo riêng biệt trong mỗi cảnh, nếu trải nghiệm thực tế tăng cường của bạn trải dài trên một khoảng cách xa.