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

W tym przewodniku opisujemy, jak za pomocą Kreatora geoprzestrzennego pisać skrypty w języku C#, które pozwalają szybko wykonywać typowe zadania, takie jak tworzenie i przenoszenie obiektów ARGeospatialCreatorAnchor w trybie edycji Unity. Jest to przydatne podczas tworzenia wielu kotwic na podstawie wstępnie zdefiniowanej listy, np. arkusza kalkulacyjnego lub pliku KML.

Twórca geoprzestrzenny w Unity umożliwia wyświetlanie podglądu treści geoprzestrzennych w edytorze Unity. W naszym krótkim przewodniku dotyczącym Kreatora geoprzestrzennego (w języku angielskim) znajdziesz informacje o tym, jak za pomocą interfejsu edytora Unity stworzyć swoją pierwszą eksplorację AR z obsługą danych geoprzestrzennych przy użyciu interfejsu edytora Unity. W przypadku bardziej zaawansowanych projektów możesz tworzyć obiekty GameObject twórców geoprzestrzennych i modyfikować je w sposób zautomatyzowany, zamiast korzystać z interfejsu edytora Unity.

Zakładamy w nim, że znasz podstawowe pojęcia dotyczące twórców geoprzestrzennych omówione w krótkim wprowadzeniu i możesz zacząć dodawać do sceny kotwice twórcy geoprzestrzennego. Musisz włączyć twórcę geoprzestrzennego i skonfigurować go przy użyciu kluczy interfejsu API oraz początkowych obiektów sesji AR w scenie. Jeśli zaczynasz od zera, najpierw wykonaj czynności opisane w krótkim przewodniku, a następnie uwzględnij sekcję „Włącz twórczość geoprzestrzenną”.

Wprowadzenie

Załóżmy, że masz zbiór znanych lokalizacji wokół ratusza w San Francisco w Kalifornii, w których chcesz umieścić treści AR. Musisz utworzyć obiekty zakotwiczone w każdej z tych lokalizacji, a następnie dołączyć do nich podstawową geometrię.

Zanim utworzysz kotwice, musisz określić ARGeospatialCreatorOrigin, który stanowi punkt odniesienia przy przeliczaniu szerokości i długości geograficznej oraz wysokości na współrzędne świata Unity. Źródło będzie również zawierać podkomponent CesiumGeoreference i obiekt podrzędny Cesium3DTileset, co umożliwi Cesium wyrenderowanie otaczającego obszaru w widoku sceny w edytorze Unity. Potrzebujesz do tego klucza interfejsu API Map Google zgodnie z opisem na krótkim wprowadzeniu

Tworzenie punktu początkowego

Interfejs API dla twórcy geoprzestrzennego obejmuje metodę fabryczną tworzenia elementu ARGeospatialCreatorOrigin w scenie i dodawania wymaganych komponentów Cesium. Ten kod tworzy punkt początkowy na pobliskiej szerokości i długości geograficznej oraz wysokości i przy użyciu danego klucza interfejsu API Map Tiles:

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

Domyślnie ten obiekt znajduje się w miejscach (0, 0, 0) we współrzędnych świata Unity, co sprawdza się w tym przykładzie.

Pobierz plik referencyjny ARAnchorManager

Obiekt ARAnchorManager jest wymagany do rozpoznania kotwic geoprzestrzennych w czasie działania aplikacji, dlatego potrzebny jest też odniesienie do elementu ARAnchorManager w scenie. Jeśli na początku używasz aplikacji Geospatial Sample dołączonej do rozszerzeń ARCore, menedżer kotwicy jest dołączony do obiektu GameObject „AR Session Origin”. Zakładając, że w scenie masz dokładnie 1 menedżera kotwicy, możesz uzyskać do niego odwołanie w ten sposób:

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

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

Utwórz kotwice terenu

Rozważmy tę dwuwymiarową tablicę wartości double reprezentującą dokładną szerokość i długość geograficzną w 3 punktach po wschodniej stronie ratusza w San Francisco w Kalifornii:

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 w naszej aplikacji AR chcesz w każdej z tych lokalizacji umieścić na poziomie ziemi. 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;
}

Spowoduje to utworzenie zakotwiczeń terenu w każdym punkcie. Twórca geoprzestrzenny automatycznie umieszcza kotwice w odpowiednich współrzędnych świata Unity, obliczając ich położenie względem obiektu ARGeospatialCreatorOrigin. Aby dostosować wysokość zakotwiczenia terenu, ustaw właściwość Altitude w metrach nad lub pod powierzchnią terenu.

W czasie działania kotwicy terenu będą się wyświetlać na poziomie terenu w przypadku uruchomionej aplikacji i przesunięte przez właściwość Altitude. W widoku sceny w edytorze domyślnie są one renderowane na wysokości WGS84 = 0, a nie względem geometrii 3D. To często nie jest to miejsce, w którym chcesz je zobaczyć, więc możesz zmienić domyślną wysokość punktu zakotwiczenia 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 działają poza trybem edytora i nie są kompilowane w działającą aplikację.

Kotwica geoprzestrzenna na placu ratuszowym

Tworzenie kotwicy na dachu

Dla naszej kolejnej kotwicy chcesz umieścić kotwicę na dachu ratusza. Kotwica można utworzyć dokładnie w ten sam sposób z tą różnicą, że właściwość AltitudeType ma wartość 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 UseEditorAltitudeOverride i EditorAltitudeOverride. W tym przykładzie wysokość dachu nad dachem WGS84 wynosi około 10, 7 metra.

Kotwica geoprzestrzenna na dachu

Tworzenie kotwicy na określonej wysokości

Ostatnią kotwicę znajdzie się na samej górze kopuły ratusza. W przypadku tej kotwicy dokładna wysokość jest ważna, dlatego musisz ją ustawić bezpośrednio za pomocą kotwicy WGS84, a nie zakotwiczenia obejmującego teren czy dach:

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 zastępować wysokości w trybie edycji, ponieważ została ona już określona zgodnie z zasadą WGS84. Oczywiście, jeśli wysokość geometrii kafelków mapy w edytorze okaże się nieprawidłowa w porównaniu ze światem rzeczywistym, nadal można użyć zastąpienia edytora, aby zmienić położenie kotwicy w widoku sceny.

Kotwica geoprzestrzenna na kopule