Tạo và chỉnh sửa quảng cáo liên kết bằng cách lập trình trong ứng dụng Trình tạo không gian địa lý trong Unity

Hướng dẫn này mô tả cách sử dụng Geospatial Creator để 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 cho tạo nhiều neo từ một danh sách được xác định trước, chẳng hạn như một bảng tính hoặc một KML tệp.

Nhà sáng tạo không gian địa lý trong Unity cho phép bạn xem trước nội dung không gian địa lý 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 Nhà sáng tạo không gian địa lý và hướng dẫn bạn cách tạo Trải nghiệm thực tế tăng cường hỗ trợ không gian địa lý mà không cần lập trình nhiều bằng Unity Giao diện người dùng của Trình chỉnh sửa. Đối với các dự án nâng cao hơn, bạn nên tạo và thao tác Đối diện với nhà sáng tạo không gian địa lý theo cách có lập trình thay vì sử dụng Unity Giao diện người dùng của Trình chỉnh sửa.

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ề không gian địa lý của nhà sáng tạo được giới thiệu trong Quickstart và bạn đã sẵn sàng để bắt đầu thêm không gian địa lý Liên kết nhà sáng tạo với 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 khoá API, cũng như các đối tượng phiên AR ban đầu trong cảnh. Nếu bắt đầu từ đầu, hãy làm theo Hướng dẫn bắt đầu nhanh qua và bao gồm cả tuỳ chọn "Bật tính năng không gian địa lý Nhà sáng tạo" 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 các thành phần cơ bản hình học với các neo đó.

Trước khi có thể tạo quảng cáo cố định, bạn nên chỉ định ARGeospatialCreatorOrigin là điểm tham chiếu để chuyển đổi vĩ độ, kinh độ và cao độ đến và đi 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 ra điểm khởi hành ở vĩ độ, kinh độ và độ cao và sử dụng khoá API Thẻ thông tin của 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) trong toạ độ thế giới của Unity, phù hợp với ví dụ này.

Tải tài liệu tham khảo ARAnchorManager

ARAnchorManager bắt buộc phải phân giải các neo không gian địa lý trong thời gian chạy, do đó 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 "AR Session Origin" (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, bạn đã 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 1 mét tại mỗi vị trí trong số này trên mặt đất trong ứng dụng AR của chúng tôi. 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;
}

Tính năng này sẽ tạo các 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 một điểm neo địa hình, đặ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ù trừ bởi thuộc tính Altitude. Tuy nhiên, trong chế độ xem cảnh của Trình chỉnh sửa, theo mặc định, các đối tượng này sẽ kết xuất ở độ cao WGS84 là 0, 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.

Điểm neo không gian địa lý ở Quảng trường Tòa thị chính

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 quảng cáo cố định theo cách tương tự, ngoại trừ AltitudeType được thiết lập 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 điểm neo địa hình, bạn có thể tinh chỉnh độ cao của điểm 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 UseEditorAltitudeOverrideEditorAltitudeOverride. Đối với ví dụ này, độ cao WGS84 của mái nhà là khoảng 10,7 mét.

Điểm neo không gian địa lý trên mái nhà

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ẽ thiết lập độ 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 phải sử dụng tính năng ghi đè độ cao chỉ dành cho người chỉnh sửa, vì độ cao là đã đượ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ế giới thực, 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.

Neo không gian địa lý trên mái vòm