Làm quen với Nhà sáng tạo theo không gian địa lý trong Unity

Trình tạo Không gian địa lý ARCore cho Unity hỗ trợ bạn xem trước nội dung Không gian địa lý trong Trình chỉnh sửa Unity bằng cách hiển thị dữ liệu Google Maps ở định dạng thẻ thông tin 3D mới. Điều này giúp bạn hình dung vị trí đặt nội dung trong thế giới thực, khi bạn đang xây dựng ứng dụng.

Trình tạo không gian địa lý được cung cấp như một phần của Tiện ích ARCore cho Nền tảng thực tế tăng cường. Hướng dẫn nhanh này sẽ hướng dẫn bạn cách sử dụng Trình tạo không gian địa lý trong Unity để thêm nội dung thực tế tăng cường không gian địa lý vào ứng dụng Mẫu không gian địa lý ARCore.

Nếu bạn hiện có một ứng dụng mà bạn muốn sử dụng thay cho Mẫu không gian địa lý, 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ý dành cho Unity của chúng tôi. Sau khi ứng dụng của bạn được định cấu hình để sử dụng API Không gian địa lý, hãy chuyển đến bước Thêm phần phụ thuộc bắt buộc dưới đây rồi tiếp tục từ đó.

Điều kiện tiên quyết

Hãy làm theo hướng dẫn "Bắt đầu sử dụng các tiện ích ARCore cho Nền tảng thực tế tăng" để định cấu hình môi trường Unity nhằm tạo ra trải nghiệm thực tế tăng cường.

Mặc dù các Tiện ích ARCore hỗ trợ các phiên bản Unity cũ, nhưng Trình tạo không gian địa lý yêu cầu phải có Unity 2021.3 trở lên.

Uỷ quyền API

Bạn sẽ cần thiết lập quyền truy cập API để sử dụng API Không gian địa lý ARCore và Google Map Tiles API.

API Thẻ thông tin của Google Maps

API Thẻ thông tin của bản đồ cung cấp bản trình bày 3D dưới dạng ảnh thực về các vị trí được hỗ trợ. Chúng ta sẽ sử dụng các ô này trong Trình chỉnh sửa Unity để xem trước khu vực xung quanh cảnh AR của bạn.

Hãy xem trang Map Tiles API để bật API và tìm hiểu thêm về Thẻ thông tin bản đồ.

API Không gian địa lý ARCore

Ứng dụng của bạn sử dụng API Không gian địa lý ARCore trong thời gian chạy để tạo và tương tác với Neo không gian địa lý.

Để bật API Không gian địa lý, hãy thiết lập API ARCore 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ý

Đối với hướng dẫn này, chúng tôi sẽ giới thiệu cách sử dụng Trình tạo không gian địa lý để 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 không gian địa lý ARCore. Trong một dự án Unity mới, hãy mở Trình quản lý gói Unity và chọn gói Tiện ích ARCore. Trong bảng điều khiển chi tiết của Trình quản lý gói, hãy mở rộng Samples (Mẫu) rồi nhập Mẫu không gian địa lý vào dự án Unity của bạn.

Trước khi chạy ứng dụng, bạn phải bật chức năng ARCore và Không gian địa lý trong dự án. Sử dụng Edit > Project Settings... (Chỉnh sửa > Cài đặt dự án...) > 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). Hãy nhớ chọn "Không gian địa lý" (bạn chưa cần bật Trình tạo không gian địa lý) và nhập thông tin xác thực API của bạn. Hãy xem tài liệu "Bật API Unity không gian địa lý" cho AndroidiOS để biết thêm thông tin chi tiết.

Có một vài chế độ cài đặt Trình phát dành riêng cho nền tảng cụ thể là bắt buộc đối với bất kỳ ứng dụng Unity nào sử dụng ARCore. 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 gì 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 máy ảnh của thiết bị. Khi bạn di chuyển, độ chính xác không gian địa lý hiển thị ở đầ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 neo không gian địa lý để tồn tại ở vị trí ban đầu trong khi bạn di chuyển.

Tiếp theo, chúng tôi sẽ trình bày cách sử dụng Trình tạo không gian địa lý để tạo và trực quan hoá nội dung thực tế tăng cường (AR) tinh vi từ trong Trình chỉnh sửa Unity. Nội dung này sẽ xuất hiện trong ứng dụng của bạn tại các vị trí vĩ độ / kinh độ cụ thể trên thế giới.

Thêm phần phụ thuộc bắt buộc

Geos Không gian Creator sử dụng gói Unity của bên thứ ba có tên là Cesium để kết xuất Thẻ thông tin Google Map trong cửa sổ Cảnh (Scene) của Trình chỉnh sửa Unity. Trước khi bật các tính năng Người tạo không gian địa lý, 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:

  1. Tải phiên bản mới nhất của .tgz Cesium đã biên dịch trước cho Unity từ trang Bản phát hành GitHub. Phiên bản đề xuất hiện tại của gói Cesium cho Unity là 1.1.0.
  2. Mở Trình quản lý gói Unity bằng cách nhấp vào trình đơn "Window" của Unity, sau đó chọn "Package Manager" (Trình quản lý gói).
  3. Nhấp vào biểu tượng "+" rồi chọn "Thêm gói từ tarball".
  4. Chọn tệp Cesium cho Unity .tgz đã tải xuống ở Bước 1.
  5. 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.

Thêm gói .tgz bằng Trình quản lý gói Unity

Bật tính năng Người tạo không gian địa lý

Giờ đây, bạn đã sẵn sàng bật Trình tạo không gian địa lý:

  1. Trên hộp thoại Build Settings (Cài đặt bản dựng), hãy đảm bảo nền tảng bạn chọn là "Android" hoặc "iOS". Các tính năng dành cho Người tạo không gian địa lý không sử dụng được cho các nền tảng khác tại thời điểm này.
  2. Chuyển đến phần Project Settings (Cài đặt dự án) > XR Plug-in Management (Quản lý trình bổ trợ XR) > ARCore Extension (Tiện ích ARCore).
  3. Nếu bạn chưa thiết lập(các) khoá API ARCore Android và/hoặc iOS trong bước trước, hãy nhớ thực hiện ngay.
  4. Bật cả hai nút chuyển "Không gian địa lý" và "Người tạo không gian địa lý". Sau khi nhấp vào để bật nút bật/tắt Trình tạo không gian địa lý, một trình hướng dẫn theo phương thức không phải là 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 Trình tạo không gian địa lý.
  5. Nhấp vào "Hoàn tất" trên trình hướng dẫn.

Sau khi hoàn tất trình hướng dẫn, Unity sẽ kích hoạt quá trình biên dịch tập lệnh của bạn. Hãy đợi quá trình biên dịch lại hoàn tất trước khi 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 những nền tảng đó ngay bây giờ.)

Thêm Nguồn gốc của nhà sáng tạo theo không gian địa lý bằng ô bản đồ

Cảnh của bạn cần có đúng một đối tượng "Nguồn gốc nhà sáng tạo theo không gian địa lý". Đố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 trong thế giới thực sang toạ độ trò chơi Unity.

Để thêm Nguồn gốc của nhà sáng tạo theo không gian địa lý vào cảnh của bạn, hãy chọn Đối tượng trò chơi > XR > Nguồn gốc của nhà sáng tạo theo không gian địa lý. Đối tượng mới tạo này cần một thông tin tham chiếu địa lý liên kết vĩ độ, kinh độ và độ cao cụ thể với vị trí của điểm khởi hành trong toạ độ của trò chơi. Trong ngăn Inspector (Trình kiểm tra) của Creator Origin để tạo không gian địa lý, hãy thêm tham chiếu địa lý bằng cách nhấp vào nút Add Cesium Georeference Component.

Thêm }} nguồn gốc của nhà sáng tạo không gian địa lý

Ngoài việc là điểm tham chiếu cho các đối tượng AR, Cesium Georeference còn thêm đối tượng Thẻ thông tin 3D Cesium vào cảnh. Đối tượng này sẽ hiển thị Thẻ thông tin của Google Map 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 nơi nội dung thực tế tăng cường sẽ xuất hiện trên thế giới. Trình kiểm tra Nguồn gốc của nhà sáng tạo theo không gian địa lý có một trường để thêm khoá API của 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 đồ sẽ tải trong Chế độ xem cảnh.

Bây giờ, hãy thay đổi các trường vĩ độ, kinh độ và chiều cao để đặt gần vị trí mà bạn muốn nội dung thực tế tăng cường xuất hiện trong ứng dụng.

Giờ đây, Chế độ xem cảnh trong Trình chỉnh sửa sẽ hiển thị các ô bản đồ theo vĩ độ và kinh độ đã chỉ định cho điểm xuất phát của bạn. Trong thời gian chạy, chúng tôi giả định ứng dụng của bạn sẽ sử dụng Máy ảnh thực tế tăng cường (AR), vì vậy, Người tạo không gian địa lý đã định cấu hình đối tượng Thẻ thông tin bản đồ 3D Cesium bằng thẻ "EditorOnly". Do đó, các thẻ thông tin sẽ không được tải xuống hoặc hiển thị trong thời gian chạy của trò chơi. Bạn có thể thay đổi việc này từ trình kiểm tra của đối tượng Cesium3DTileset. Để tìm hiểu thêm về Mã tham chiếu địa lý của Cesium và Đối tượng kỹ thuật số 3D Tiles 3D, hãy tham khảo tài liệu về Cesium dành cho Unity.

Thêm và đặt Neo cho nhà sáng tạo không gian địa lý

Giờ thì bạn đã sẵn sàng để đưa nội dung thực tế tăng cường vào cảnh! Nhấp vào ANR > XR > Neo cho người sáng tạo không gian địa lý để thêm quảng cáo liên kết vào hệ thống phân cấp cảnh của bạn. Thông qua trình kiểm tra của Neo, bạn có thể chỉ định vĩ độ, kinh độ và chiều cao chính xác. Phép biến đổi của đối tượng sẽ cập nhật ngay lập tức 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.

Thêm quảng cáo cố định cho nhà sáng tạo không gian địa lý

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 địa điểm đó nằm ở đúng vị trí trong thời gian chạy. Khi đặt độ cao của Neo cho người sáng tạo không gian địa lý, bạn có ba lựa chọn:

  • Địa hình đặt neo trên mặt đất theo vĩ độ và kinh độ được chỉ định. Cao độ 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 API Không gian địa lý của ARCore, thì "Địa hình" là một lựa chọn tốt vì neo sẽ được phân giải trực tiếp trên mặt đất với độ chính xác theo chiều dọc cao. Trường "Chênh lệch độ cao" cho phép bạn định vị vị trí neo ở phía trên hoặc phía dưới mặt đất theo 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" một mét so với địa hình.
  • Rooftop đặt neo tương ứng với đỉnh của bất kỳ cấu trúc nào ở vĩ độ và kinh độ nhất định. Giống như điểm neo địa hình, trường "Độ cao chênh lệch" cho phép bạn di chuyển điểm neo lên hoặc xuống so với vị trí mái, tính bằng mét.
  • WGS84 đặt 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ể cần phải thử và sai, vì chiều cao "0" trong WSG84 không nhất thiết thể hiện 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 thẻ thông tin 3D đã kết xuất rất chính xác, nhưng việc cố gắng đặt đối tượng ở mặt đất bằng cách sử dụng thẻ thông tin 3D làm tham chiếu có thể dẫn đến lỗi chiều cao lên tới 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 cho nhà phát triển không gian địa lý.

Cả neo địa hình và neo 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. Địa hình và chiều cao của mái nhà chỉ được xác định trong thời gian chạy, vì vậy, trường WGS84 Độ cao cho phép bạn trực quan hoá điểm neo ở một độ cao cụ thể trong khi phát triển ứng dụng. Trường Độ cao WGS84 bị bỏ qua trong thời gian chạy đối với các điểm neo địa hình và mái nhà.

Thêm Hình học vào neo

Nếu tạo và chạy ứng dụng ngay lúc này, bạn sẽ không thấy neo trong ứng dụng hỗ trợ AR. Nguyên nhân là do không có hình học nào được đính kèm vào đó. Hãy thêm một hình ảnh nguyên gốc 3D đơn giả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 Neo cho người tạo không gian địa lý trong môi trường AR. Trong trình đơn theo bối cảnh, hãy chọn 3D Object > Cube (Đối tượng 3D > Hình khối). Bạn sẽ thấy một hình khối màu xám trong chế độ xem cảnh dưới dạng một phần tử con của neo. Nếu quyết định di chuyển vị trí hoặc chế độ xoay của đối tượng trong Trình chỉnh sửa, bạn nên di chuyển đối tượng neo gốc thay vì nguyên gốc Cube con. Điều này sẽ giúp giảm sai số trong quá trình dịch từ vĩ độ / kinh độ sang toạ độ của trò chơi.

Neo cho người sáng tạo không gian địa lý với khối nguyên thuỷ hình khối lập phương

Tất nhiên, bạn cũng có thể thêm các hình học phức tạp hơn, các thành phần tuỳ ý cũng như thành phần con vào điểm neo.

Tạo và chạy ứng dụng

Đã đến lúc nhìn thấy neo của bạn 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 muốn nhìn thấy hình khối. Có ở đó không? Xin chúc mừng! Bạn đã sẵn sàng xây dựng trải nghiệm thực tế tăng cường phức tạp hơn bằng Trình tạo không gian địa lý!

Nếu bạn gặp bất kỳ vấn đề nào, hãy xem Hướng dẫn khắc phục sự cố.

Bây giờ là thời điểm thích hợp để thêm các Neo bổ sung cho người tạo không gian địa lý thực tế tăng cường với các hình dạng khác nhau. Thử thử nghiệm với nhiều neo trên mái nhà và địa hình cũng như độ dời của các neo này. Thêm tập lệnh để tạo ảnh động hoặc cho phép các hoạt động tương tác với các đối tượng.

Tìm hiểu về Neo cho nhà sáng tạo không gian địa lý và lớp ARGeospatialAnchor

Khi xây dựng trải nghiệm thực tế tăng cường tương tác và phức tạp, việc hiểu rõ mối quan hệ giữa Neo trình tạo không gian địa lý và lớp C# ARGeospatialAnchor của ARCore sẽ rất hữu ích:

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. Ngoài ra, bạn chỉ có thể tạo các hàm này sau khi phiên AR đã ổn định. Bạn có thể coi Quảng cáo cố định không gian địa lý cho nhà sáng tạo là một phần giữ chỗ tồn tại trong cảnh của mình, đồng thời chờ phiên Thực tế tăng cường (AR) sẵn sàng phân giải các đối tượng ARGeospatialAnchor. Khi phiên đã 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 giải quyết xong quảng cáo liên kết thời gian chạy, Quảng cáo liên kết của người sáng tạo không gian địa lý trong hệ thống phân cấp cảnh của bạn sẽ tự đính kèm chính nó dưới dạng một phần tử con cho AppCompat mới. Điều này có nghĩa là mọi thành phần hoặc thành phần con của Neo cho nhà sáng tạo không gian địa lý sẽ trở thành thành phần phụ hoặc nội dung tiếp theo của DDA ARGeospatialAnchor mới. Ví dụ: transform của một hình nguyên gốc được đính kèm với Neo cho người tạo không gian địa lý sẽ kế thừa từ transform của ARGeospatialAnchor, và do đó sẽ được đặt ở vị trí dự kiến trong phiên thực tế tăng cường thời gian chạy.

Nếu cần xác định một mắt hàng nào trong ARGeospatialAnchor trong thời gian chạy, bạn có thể tìm các đối tượng có thuộc tính name khớp với liên kết được tạo bằng Trình tạo không gian địa lý trên cảnh đó. Nếu phiên thực tế tăng cường được khởi động, parent của đối tượng đó sẽ là đối tượng ARGeospatialAnchor tương ứng.

Khắc phục sự cố

Tại sao quảng cáo cố định của tôi lại di chuyển?

Bạn có thể nhận thấy, đặc biệt là khi ứng dụng khởi chạy lần đầu, điểm neo có thể xuất hiện dần "trôi" hoặc thậm chí nhảy đột ngột 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 máy ảnh. Khi độ chính xác theo chiều ngang và chiều dọc được cải thiện trên 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ề sự di chuyển. Bạn nên hiển thị đối tượng theo cách khác (hoặc hoàn toàn không hiển thị) cho đến khi độ chính xác của vị trí đạt đến một ngưỡng nhất định. Để thực hiện việc này, bạn có thể truy vấn thuộc tính ARCoreEarthManager.CameraGeospatialPose để xác định độ chính xác của bản cập nhật khung hiện tại.

Tại sao quảng cáo cố định của tôi lại xuất hiện ở độ cao không chính xác?

Khi sử dụng loại độ cao "Thủ công" cho Neo cho người tạo 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 tới vài mét giữa mặt đất gốc hiển thị trong các ô bản đồ và mặt đất thực tế theo báo cáo của Hệ thống định vị trực quan (VPS) của Google. Nếu Neo không gian địa lý có vẻ như nằm không chính xác trong thời gian chạy, bạn nên trực tiếp xác thực chiều cao VPS bằng cách sử dụng lớp phủ 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ị chính xác trong Chế độ xem cảnh của Trình chỉnh sửa

Nếu Cesium3DTileset có vẻ như đang tải các thẻ thông tin, nhưng chúng lại được hiển thị dưới dạng màu đỏ tươi đồng nhất trong khung hiển thị cảnh, hãy thêm gói Biểu đồ đổ bóng 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 Biểu đồ đổ bóng, hãy mở Trình quản lý gói Unity (Window > Package Manager) (Cửa sổ > Trình quản lý gói). Hãy đảm bảo bạn đang duyệt qua các gói có trên Unity Package Registry (Sổ đăng ký gói Unity) bằng cách chọn "Packages: Unity Registry" (Gói: Unity Registry) trên 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 thẻ thông tin 3D sẽ tải lại và hiển thị đúng cách trong Scene View (Chế độ xem cảnh).

Ứng dụng cho thấy màn hình đen trong thời gian chạy thay vì chế độ xem máy ảnh

Theo mặc định, Quy trình hiển thị phổ quát (URP) của Unity không được định cấu hình cho Máy ảnh 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 máy ảnh, bạn cần thêm AR Background Renderer Feature vào mỗi Trình kết xuất URP trong cảnh.

Thêm tính năng Trình kết xuất nền AR

Để thêm tính năng này, hãy tìm "trình kết xuất" trong dự án của bạn. Đối với mỗi đối tượng Trình kết xuất URP, hãy nhấp vào nút "Thêm tính năng trình kết xuất" trong Trình kiểm tra rồi thêm Trình kết xuất nền AR.

Tại sao các thẻ liên kết được đặt xa nguồn gốc lại 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 số học dấu phẩy động. Bạn có thể giảm thiểu điều này bằng cách đảm bảo điểm gốc của bạn ở gần điểm neo AR. Khoảng cách hơn 20 km có thể dẫn đến sự không chính xác. Nếu trải nghiệm thực tế tăng cường diễn ra ở khoảng cách xa, bạn nên sử dụng nhiều cảnh, với một điểm neo riêng trong mỗi cảnh.