Hướng dẫn này mô tả cách sử dụng Trình tạo không gian địa lý để viết tập lệnh C# nhằm nhanh chóng hoàn thành các tác vụ phổ biến như tạo và di chuyển đối tượng ARGeospatialCreatorAnchor
trong chế độ Chỉnh sửa của Unity. Điều này có thể hữu ích khi tạo nhiều neo từ một danh sách được xác định trước, chẳng hạn như bảng tính hoặc tệp KML.
Geospatial Creator trong Unity cho phép bạn xem trước nội dung Địa lý không gian trong Trình chỉnh sửa Unity. Hướng dẫn bắt đầu nhanh của chúng tôi giới thiệu về Trình tạo không gian địa lý và hướng dẫn bạn cách tạo trải nghiệm AR hỗ trợ không gian địa lý đầu tiên với mức độ lập trình tối thiểu bằng cách sử dụng giao diện người dùng Trình chỉnh sửa Unity. Đối với các dự án nâng cao hơn, bạn nên tạo và thao tác với GameObjects của Trình tạo không gian địa lý theo phương thức lập trình thay vì sử dụng giao diện người dùng của Trình chỉnh sửa Unity.
Hướng dẫn này giả định rằng bạn đã quen thuộc với các khái niệm cơ bản về Geospatial Creator được giới thiệu trong phần Làm quen nhanh và bạn đã sẵn sàng bắt đầu thêm neo Geospatial Creator vào một cảnh. Bạn cần bật và định cấu hình Trình tạo không gian địa lý bằng các khoá API, cũng như các đối tượng phiên AR ban đầu trong cảnh. Nếu bạn bắt đầu từ đầu, hãy làm theo hướng dẫn nhanh, bao gồm cả phần "Bật Trình tạo không gian địa lý" trước khi tiếp tục.
Bắt đầu
Trong ví dụ này, giả sử bạn có một tập hợp các vị trí đã biết xung quanh Tòa thị chính ở San Francisco, California, Hoa Kỳ, nơi bạn muốn đặt nội dung AR. Bạn sẽ cần tạo các đối tượng neo tại mỗi vị trí này, sau đó đính kèm hình học cơ bản vào các neo đó.
Trước khi có thể tạo neo, bạn nên chỉ định một ARGeospatialCreatorOrigin
. Đây là điểm tham chiếu để chuyển đổi vĩ độ, kinh độ và độ cao sang và từ toạ độ thế giới Unity.
Nguồn gốc cũng sẽ chứa một thành phần phụ CesiumGeoreference
và một đối tượng con Cesium3DTileset
, cho phép Cesium kết xuất khu vực xung quanh trong chế độ xem Cảnh của trình chỉnh sửa Unity. Để làm việc này, bạn cần có khoá API Thẻ thông tin của Google Maps như mô tả trong phần Bắt đầu nhanh
Tạo nguồn gốc
API cho Trình tạo không gian địa lý bao gồm một phương thức nhà máy để tạo ARGeospatialCreatorOrigin
trong cảnh và thêm các thành phần Cesium bắt buộc.
Mã sau đây tạo điểm gốc tại vĩ độ, kinh độ và độ cao lân cận, đồng thời sử dụng khoá API Thẻ thông tin trên bản đồ đã cho:
ARGeospatialCreatorOrigin origin =
GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");
Theo mặc định, đối tượng này được đặt tại (0, 0, 0) theo toạ độ thế giới của Unity. Toạ độ này phù hợp với ví dụ này.
Tải tài liệu tham khảo ARAnchorManager
Bạn cần có ARAnchorManager
để phân giải neo không gian địa lý trong thời gian chạy, vì vậy, bạn cũng cần tham chiếu đến ARAnchorManager
trong cảnh. Nếu bạn bắt đầu với ứng dụng Mẫu không gian địa lý đi kèm với Tiện ích ARCore, thì Trình quản lý neo sẽ được đính kèm vào GameObject "Nguồn gốc phiên AR". Giả sử bạn có
chính xác một trình quản lý neo trong cảnh, bạn có thể tham chiếu đến trình quản lý đó như
sau:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Giờ đây, khi đã có một nguồn gốc và trình quản lý neo, bạn có thể bắt đầu tạo các đối tượng ARGeospatialCreatorAnchor
.
Tạo neo địa hình
Hãy xem xét mảng hai chiều sau đây gồm các giá trị double
, đại diện cho vĩ độ và kinh độ chính xác tại ba điểm ở phía đông của Tòa thị chính ở San Francisco, California, Hoa Kỳ:
double[,] _cityHallEastPoints = {
{ 37.77936, -122.418617 }, // in front of city hall
{ 37.77965, -122.418680 }, // right of city hall
{ 37.77917, -122.418577 }}; // left of city hall
Giả sử bạn muốn đặt một khối lập phương có kích thước 1 mét tại mỗi vị trí này, ở cấp mặt đất, trong ứng dụng AR của chúng ta. Mã sau đây tạo các đối tượng ARGeospatialCreatorAnchor
và gán các thuộc tính của đối tượng đó cho các giá trị thích hợp:
for (int i = 0; i < _cityHallEastPoints.GetLength(0); i++)
{
ARGeospatialCreatorAnchor anchor =
new GameObject("City Hall " + i).AddComponent<ARGeospatialCreatorAnchor>();
anchor.Origin = origin;
anchor.AnchorManager = anchorManager;
anchor.Latitude = _cityHallEastPoints[i, 0];
anchor.Longitude = _cityHallEastPoints[i, 1];
anchor.AltitudeType = AnchorAltitudeType.Terrain;
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.parent = anchor.transform;
}
Thao tác này sẽ tạo neo địa hình tại mỗi điểm. Geospatial Creator tự động đặt neo tại các toạ độ thế giới Unity thích hợp bằng cách tính toán vị trí của neo so với đối tượng ARGeospatialCreatorOrigin
. Để điều chỉnh độ cao của neo địa hình, hãy đặt thuộc tính Altitude
theo mét phía trên hoặc bên dưới bề mặt địa hình.
Trong thời gian chạy, neo địa hình sẽ phân giải ở cấp mặt đất cho ứng dụng đang chạy, được bù bằng thuộc tính Altitude
. Tuy nhiên, trong chế độ xem cảnh của Trình chỉnh sửa, các đối tượng này hiển thị ở độ cao WGS84 là 0 theo mặc định, chứ không phải tương ứng với hình học thẻ thông tin 3D. Đây thường không phải là nơi bạn muốn xem các điểm neo, vì vậy, bạn có thể ghi đè độ cao mặc định của điểm neo trong chế độ xem cảnh của Trình chỉnh sửa bằng cách đặt thuộc tính UseEditorAltitudeOverride
thành true
và chỉ định độ cao theo mét WGS84 bằng thuộc tính EditorAltitudeOverride
:
anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza
Hai thuộc tính này không có hiệu lực bên ngoài chế độ Trình chỉnh sửa và không được biên dịch vào ứng dụng đang chạy.
Tạo điểm neo trên mái nhà
Đối với điểm neo tiếp theo, giả sử bạn muốn đặt điểm neo trên mái nhà của Tòa thị chính. Bạn có thể tạo neo theo cách tương tự, ngoại trừ thuộc tính AltitudeType
được đặt thành AnchorAltitudeType.Rooftop
:
ARGeospatialCreatorAnchor cityHallRoofAnchor =
new GameObject("City Hall Roof").AddComponent<ARGeospatialCreatorAnchor>();
cityHallRoofAnchor.Origin = origin;
cityHallRoofAnchor.AnchorManager = anchorManager;
cityHallRoofAnchor.Latitude = 37.77959;
cityHallRoofAnchor.Longitude = -122.419006;
cityHallRoofAnchor.AltitudeType = AnchorAltitudeType.Rooftop;
GameObject roofCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
roofCube.transform.parent = cityHallRoofAnchor.transform;
Tương tự như các neo địa hình, bạn có thể tinh chỉnh độ cao của neo trên mái nhà trong chế độ xem cảnh của Trình chỉnh sửa bằng cách sử dụng các thuộc tính UseEditorAltitudeOverride
và EditorAltitudeOverride
. Đối với ví dụ này, độ cao WGS84 của mái nhà là khoảng 10,7 mét.
Tạo điểm neo ở một độ cao cụ thể
Điểm neo cuối cùng của chúng ta sẽ được đặt ở ngay đầu mái vòm của Tòa thị chính. Đối với điểm neo này, độ cao chính xác là rất quan trọng, vì vậy, bạn sẽ đặt độ cao một cách rõ ràng bằng cách sử dụng điểm neo WGS84 thay vì điểm neo địa hình hoặc điểm neo trên mái nhà:
ARGeospatialCreatorAnchor cityHallDomeAnchor =
new GameObject("City Hall Dome").AddComponent<ARGeospatialCreatorAnchor>();
cityHallDomeAnchor.Origin = origin;
cityHallDomeAnchor.AnchorManager = anchorManager;
cityHallDomeAnchor.Latitude = 37.77928;
cityHallDomeAnchor.Longitude = -122.419241;
cityHallDomeAnchor.AltitudeType = AnchorAltitudeType.WGS84;
cityHallDomeAnchor.Altitude = 73;
GameObject domeCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
domeCube.transform.parent = cityHallDomeAnchor.transform;
Bạn không cần sử dụng chế độ ghi đè độ cao chỉ dành cho trình chỉnh sửa vì độ cao đã được chỉ định theo WGS84. Tất nhiên, nếu chiều cao của hình học Thẻ thông tin trên bản đồ trong trình chỉnh sửa không chính xác so với thực tế, bạn vẫn có thể sử dụng tính năng ghi đè trình chỉnh sửa để định vị lại neo trong chế độ xem cảnh.