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 Trình tạo không gian địa lý để viết tập lệnh C# để 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 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 .

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 Dalvik dành cho 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 sẽ cần bật công cụ Tạo không gian địa lý và được định cấu hình 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ắ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 nhóm các vị trí đã biết xung quanh Toà thị chính trong San Francisco, California, Hoa Kỳ, nơ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 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 thành phần phụ CesiumGeoreference và Đối tượng con Cesium3DTileset, cho phép Cesium kết xuất xung quanh trong chế độ xem Cảnh (Scene) của trình chỉnh sửa Unity. Để làm được điều này, bạn cần có một Bản đồ Google Khoá API Thẻ thông tin như mô tả trong Quickstart

Tạo Nguồn gốc

API dành cho nhà sáng tạo không gian địa lý sử dụng phương pháp ban đầu để tạo một ARGeospatialCreatorOrigin trong cảnh rồi 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 Unity. sẽ phù hợp với ví dụ này.

Lấy tệp tham chiếu về 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 bằng ứng dụng Mẫu không gian địa lý đi kèm với Tiện ích ARCore, Neo Trình quản lý được đính kèm vào "Nguồn gốc phiên AR" GameObject. Giả sử bạn có vào đúng một trình quản lý cố định trong cảnh của bạn, bạn có thể lấy tham chiếu đến nó như sau:

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

Giờ đây khi đã có nguồn gốc và trình quản lý cố định, bạn có thể bắt đầu tạo Đối tượng ARGeospatialCreatorAnchor.

Tạo neo Địa hình

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

Neo không gian địa lý trong City Hall Tower

Tạo quảng cáo cố định trên sân thượng

Ở vị trí neo tiếp theo, giả sử bạn muốn đặt một neo trên nóc của Thành phố Hội trường. 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 neo địa hình, bạn có thể tinh chỉnh độ cao của mái nhà neo trong khung hiển thị cảnh của Editor bằng cách sử dụng UseEditorAltitudeOverride và Thuộc tính EditorAltitudeOverride. Trong ví dụ này, cao độ WGS84 của nóc cao khoảng 10,7 mét.

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

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

Điểm neo cuối cùng của chúng ta sẽ được đặt trên đỉnh của mái vòm của Toà thị chính. Để neo này, cao độ chính xác rất quan trọng, vì vậy bạn sẽ đặt độ cao rõ ràng bằng cách sử dụng neo WGS84 thay vì địa hình hoặc neo trên mái:

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 các Thẻ thông tin bản đồ hình học trong trình chỉnh sửa hoá ra không chính xác so với thế giới thực, 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 cảnh chế độ xem.

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