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 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 công việc phổ biến như tạo và di chuyển các đối tượng ARGeospatialCreatorAnchor ở chế độ Chỉnh sửa của Unity. Thao tác này có thể hữu ích khi tạo nhiều liên kết từ một danh sách xác định trước, chẳng hạn như bảng tính hoặc tệp KML.

Trình 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 nhanh của chúng tôi sẽ giới thiệu về Nhà sáng tạo không gian địa lý và hướng dẫn bạn cách xây dựng trải nghiệm thực tế tăng cường không gian địa lý đầu tiên mà không cần lập trình nhiều, thông qua giao diện người dùng Trình chỉnh sửa Unity. Đối với những dự án nâng cao hơn, bạn nên tạo và sử dụng giao diện người dùng cho Trình chỉnh sửa Unity theo cách lập trình theo phương thức lập trình cho Geospatial Creator Creators.

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ề nhà sáng tạo theo không gian địa lý được giới thiệu trong phần Hướng dẫn nhanh và bạn đã sẵn sàng bắt đầu thêm quảng cáo cố định cuối màn hình theo không gian địa lý 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ý với các khoá API cũng như các đối tượng phiên AR ban đầu trong cảnh của mình. Nếu bạn bắt đầu từ đầu, hãy làm theo Hướng dẫn bắt đầu nhanh và bao gồm phần "Bật người tạo không gian địa lý" trước khi tiếp tục.

Bắt đầu

Đối với ví dụ này, giả sử bạn có một nhóm các vị trí đã biết xung quanh Toà thị chính ở San Francisco, California, Hoa Kỳ, tại đó bạn muốn đặt nội dung thực tế tăng cường. 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 ARGeospatialCreatorOrigin. Đây là điểm tham chiếu để chuyển đổi vĩ độ, kinh độ và cao độ sang và từ toạ độ trên thế giới của Unity. Nguồn gốc cũng sẽ chứa thành phần phụ CesiumGeoreference và đối tượng con Cesium3DTileset, cho phép Cesium kết xuất khu vực xung quanh trong thành phần hiển thị Scene của trình chỉnh sửa Unity. Để làm được điều này, bạn cần có khoá Google Maps Tiles API như mô tả trong Hướng dẫn nhanh

Tạo nguồn gốc

API dành cho Trình tạo không gian địa lý bao gồm một phương thức ban đầu để tạo một ARGeospatialCreatorOrigin trong cảnh và thêm các thành phần Cesium bắt buộc. Mã sau đây sẽ tạo ra điểm gốc ở vĩ độ, kinh độ và độ cao lân cận và sử dụng khoá API Map Tiles đã 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, hoạt động tốt trong ví dụ này.

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

ARAnchorManager là bắt buộc để phân giải các 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 {4/} "Nguồn gốc phiên AR". Giả sử bạn có chính xác một trình quản lý liên kết trong cảnh của mình, bạn có thể lấy thông tin tham chiếu đến trình quản lý đó như sau:

ARAnchorManager anchorManager =
    Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];

Bây giờ, khi đã có một nguồn gốc và một trình quản lý liên kết, bạn có thể bắt đầu tạo các đối tượng ARGeospatialCreatorAnchor.

Tạo neo cho địa hình

Hãy xem xét mảng hai chiều của các giá trị double sau đây, thể hiện vĩ độ và kinh độ chính xác tại ba điểm ở phía đông của Toà 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í này, trên mặt đất, trong ứng dụng AR của chúng tôi. Đoạn mã sau đây sẽ tạo các đối tượng ARGeospatialCreatorAnchor và gán thuộc tính của các đối tượng đó cho giá trị phù 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. Trình tạo không gian địa lý sẽ tự động đặt các neo tại các toạ độ phù hợp trên thế giới của Unity, bằng cách tính toán vị trí tương ứng với đối tượng ARGeospatialCreatorOrigin. Để điều chỉnh độ cao của một neo địa hình, hãy đặt thuộc tính Altitude tính bằng mét ở phía trên hoặc phía 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, phần bù trừ cho thuộc tính Altitude. Tuy nhiên, trong khung hiển thị cảnh của Trình chỉnh sửa, theo mặc định, các cấu hình này hiển thị ở độ cao WGS84 là 0, không liên quan đến hình học của thẻ thông tin 3d. Đây thường không phải là nơi bạn muốn nhìn thấy các thành phần đó, vì vậy, bạn có thể ghi đè độ cao mặc định của điểm neo trong khung hiển thị cảnh của Trình chỉnh sửa bằng cách đặt thuộc tính UseEditorAltitudeOverride thành true rồi chỉ định độ cao theo WGS84 mét 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 ảnh hưởng đến bên ngoài chế độ Trình chỉnh sửa và không được biên dịch thành ứng dụng đang chạy.

Neo không gian địa lý tại Quảng trường Toà thị chính

Tạo neo trên mái nhà

Đối với điểm neo tiếp theo của chúng ta, giả sử bạn muốn đặt một neo trên mái nhà của Trung tâm thành phố. Bạn có thể tạo liên kết theo cách chính xác, 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ư 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 UseEditorAltitudeOverrideEditorAltitudeOverride. Trong ví dụ này, độ cao WGS84 của mái nhà là khoảng 10,7 mét.

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

Tạo điểm neo ở một độ cao cụ thể

Địa điểm cuối cùng sẽ được đặt trên đỉnh mái vòm của Toà thị chính. Đối với điểm neo này, độ cao chính xác rất quan trọng. Vì vậy, bạn cần đặt độ cao rõ ràng bằng cách sử dụng điểm neo WGS84, thay vì dùng neo WGS84, thay vì dùng địa hình hoặc 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 tính năng 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 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 chế độ ghi đè của trình chỉnh sửa để đặt lại vị trí neo trong chế độ xem cảnh.

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