Automatyczne tworzenie i edytowanie reklam zakotwiczonych w Kreatorze danych geoprzestrzennych w Unity

Z tego przewodnika dowiesz się, jak za pomocą Geospatial Creator pisać skrypty C#, aby szybko wykonywać typowe zadania, takie jak tworzenie i przenoszenie obiektów ARGeospatialCreatorAnchor w trybie edycji w Unity. Może to być przydatne do tworzenia wielu kotwic z uprzednio zdefiniowanej listy, np. arkusza kalkulacyjnego lub pliku KML.

Geospatial Creator w Unity umożliwia wyświetlanie podglądu treści geoprzestrzennych w edytorze Unity. W naszym przewodniku dla początkujących znajdziesz informacje o narzędzie Geospatial Creator oraz instrukcje tworzenia pierwszej rozszerzonej rzeczywistości z wykorzystaniem danych geoprzestrzennych z minimalną ilością programowania za pomocą interfejsu edytora Unity. W przypadku bardziej zaawansowanych projektów możesz tworzyć obiekty Geospatial Creator i manipulować nimi za pomocą kodu zamiast interfejsu edytora Unity.

W tym przewodniku zakładamy, że znasz podstawowe pojęcia dotyczące Geospatial Creator, które zostały omówione w części wprowadzającej, i że jesteś gotowy/gotowa do dodawania do sceny punktów odniesienia Geospatial Creator. Musisz mieć włączone i skonfigurowane narzędzie Geospatial Creator za pomocą kluczy interfejsu API oraz początkowe obiekty sesji AR w scenie. Jeśli zaczynasz od zera, postępuj zgodnie z przewodnikiem Szybki start, w tym z sekcją „Włączanie Geospatial Creator”.

Pierwsze kroki

Załóżmy, że masz zestaw znanych lokalizacji w pobliżu ratusza w San Francisco w Kalifornii w Stanach Zjednoczonych, w których chcesz umieścić treści AR. W każdej z tych lokalizacji musisz utworzyć obiekty kotwiczne, a potem dołączyć do nich podstawową geometrię.

Zanim utworzysz kotwy, musisz określić punkt odniesienia ARGeospatialCreatorOrigin, który jest punktem odniesienia do konwertowania szerokości geograficznych, długości geograficznych i wysokość geograficznych na współrzędne świata Unity i zwrotnie. Punkt początkowy będzie też zawierać podelement CesiumGeoreference i obiekt podrzędny Cesium3DTileset, co pozwoli Cesium renderować obszar wokół w widoku sceny w edytorze Unity. W tym celu potrzebujesz klucza interfejsu API Mapy Google Tiles, zgodnie z opisem w krótkim wprowadzeniu.

Tworzenie punktu początkowego

Interfejs API dla Geospatial Creator zawiera metodę fabryczną do tworzenia ARGeospatialCreatorOrigin w scenie i dodawania wymaganych komponentów Cesium. Poniższy kod tworzy punkt początkowy o zbliżonej szerokości geograficznej, długości geograficznej i wysokości oraz za pomocą podanego klucza Map Tiles API:

ARGeospatialCreatorOrigin origin =
  GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
    37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");

Domyślnie obiekt jest umieszczany w współrzędnych świata Unity (0, 0, 0), co w tym przykładzie sprawdza się dobrze.

Pobierz referencję ARAnchorManager

ARAnchorManager jest wymagany do rozwiązywania zakotwiczeń geoprzestrzennych w czasie działania, dlatego w scenie musisz też umieścić odwołanie do ARAnchorManager. Jeśli zacząłeś/zaczęłaś od aplikacji Geospatial Sample dołączonej do rozszerzeń ARCore, menedżer osi odniesienia jest dołączony do obiektu „AR Session Origin”. Zakładając, że masz w scenie dokładnie 1 menedżera kotwicy, możesz uzyskać do niego odwołanie w ten sposób:

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

Teraz, gdy masz już źródło i menedżera kotwic, możesz zacząć tworzyć obiekty ARGeospatialCreatorAnchor.

Tworzenie punktów kotwiczenia terenu

Rozważmy dwuwymiarowy tablica wartości double, która reprezentuje dokładną szerokość i długość geograficzną w 3 punktach na wschodniej stronie ratusza w San Francisco w Kalifornii w Stanach Zjednoczonych:

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

Załóżmy, że chcesz umieścić w naszej aplikacji AR sześcian o boku 1 metra w każdej z tych lokalizacji na poziomie gruntu. Ten kod tworzy obiekty ARGeospatialCreatorAnchor i przypisuje ich właściwości do odpowiednich wartości:

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;
}

W każdym punkcie tworzone są kotwy terenu. Geospatial Creator automatycznie umieszcza kotwy w odpowiednich współrzędnych świata Unity, obliczając ich położenie względem obiektu ARGeospatialCreatorOrigin. Aby dostosować wysokość kotwicy terenu, ustaw właściwość Altitude w metrach nad lub pod powierzchnią terenu.

W czasie wykonywania kodu uchwyty terenu będą rozwiązywane na poziomie gruntu w uruchomionej aplikacji, przesunięte o wartość właściwości Altitude. W widoku sceny w Edytorze są one jednak domyślnie renderowane na wysokości 0 w układzie WGS84, a nie w układzie współrzędnych 3D. Często nie jest to miejsce, w którym chcesz je widzieć, więc możesz zastąpić domyślną wysokość kotwicy w widoku sceny w Edytorze, ustawiając właściwość UseEditorAltitudeOverride na true i określając wysokość w metrach WGS84 za pomocą właściwości EditorAltitudeOverride:

anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza

Te 2 właściwości nie mają wpływu poza trybem edytora i nie są kompilowane w uruchomionej aplikacji.

Geospatial Anchor na placu City Hall

Tworzenie kotwy dachowej

Przy następnej przywciętej treści załóżmy, że chcesz umieścić przywieszka na dachu ratusza. Kotwicę można utworzyć w ten sam sposób, z tym że właściwość AltitudeType jest ustawiona na 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;

Podobnie jak w przypadku kotwic terenu, możesz dostosować wysokość kotwicy na dachu w widoku sceny w Edytorze za pomocą właściwości UseEditorAltitudeOverrideEditorAltitudeOverride. W tym przykładzie wysokość dachu w układzie WGS84 wynosi około 10, 7 metra.

Geospatial Anchor na dachu

Tworzenie kotwicy na określonej wysokości

Ostatni punkt odniesienia zostanie umieszczony na szczycie kopuły ratusza. W przypadku tego punktu zakotwiczenia ważna jest dokładna wysokość, dlatego należy ją ustawić wyraźnie, używając punktu zakotwiczenia WGS84 zamiast punktu zakotwiczenia na terenie lub na dachu:

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;

Nie trzeba używać zastąpienia wysokości dostępnego tylko w edytorze, ponieważ wysokość jest już określona zgodnie z WGS84. Oczywiście, jeśli wysokość geometrii płytek mapy w edytorze okazała się nieprawidłowa w porównaniu ze światem rzeczywistym, możesz użyć zastąpienia w edytorze, aby zmienić pozycję kotwicy w widoku sceny.

Geospatial Anchor na kopule