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

Ten przewodnik opisuje, jak używać narzędzia Geospatial Creator do pisania skryptów C# do szybkiego wykonywania typowych zadań, takich jak tworzenie i przenoszenie ARGeospatialCreatorAnchor obiektów w trybie edycji w Unity. Może to być przydatne dla: tworząc wiele kotwic na podstawie wstępnie zdefiniowanej listy, np. arkusza kalkulacyjnego lub pliku KML .

Twórca danych geoprzestrzennych w Unity pozwala wyświetlać podgląd treści geoprzestrzennych w Edytor Unity. Nasz krótki przewodnik przedstawia narzędzie Geospatial Creator oraz informacje o tym, jak środowisko AR z obsługą geoprzestrzenną z minimalną liczbą programowania przy użyciu środowiska Unity Interfejs edytora. W przypadku bardziej zaawansowanych projektów można utworzyć Obiekty gier twórców geoprzestrzennych są tworzone automatycznie, a nie w Unity. Interfejs edytora.

W tym przewodniku zakładamy, że znasz podstawowe pojęcia związane z twórcami geoprzestrzennymi przedstawione w krótkim wprowadzeniu, ale możesz już zacząć dodawać do nich funkcje geoprzestrzenne. Twórca zakotwicza daną scenę. Musisz mieć włączonego twórcę geoprzestrzennego skonfigurowane za pomocą kluczy interfejsu API oraz początkowych obiektów sesji AR w scena. Jeśli zaczynasz od zera, zapoznaj się z krótkim przewodnikiem w tym opcję „Włącz dane geoprzestrzenne” Twórca” zanim przejdziesz dalej.

Pierwsze kroki

Załóżmy dla przykładu, że masz zbiór znanych lokalizacji wokół ratusza w San Francisco, Kalifornia, USA, w którym chcesz umieścić treści AR. Ty utwórz obiekty zakotwiczone w każdej z tych lokalizacji, a potem do tych punktów zakotwiczenia.

Zanim utworzysz kotwice, musisz określić ARGeospatialCreatorOrigin, który jest punktem odniesienia do konwersji szerokości i długości geograficznej oraz wysokości do i ze współrzędnych świata Unity. Źródło będzie też zawierać podkomponent CesiumGeoreference oraz obiekt podrzędny Cesium3DTileset, który umożliwia usłudze Cesium renderowanie otoczenia w widoku sceny w edytorze Unity. Potrzebujesz do tego Map Google Klucz interfejsu API Tiles zgodnie z opisem w krótkiego wprowadzenia

Tworzenie punktu początkowego

Interfejs API dla twórców danych geoprzestrzennych zawiera metodę fabryczną do tworzenia ARGeospatialCreatorOrigin w scenie i dodaj wymagane komponenty Cez. Ten kod tworzy punkt początkowy dla szerokości, długości geograficznej i pobliskiej długości i wysokość i za pomocą danego klucza interfejsu API Tiles Map:

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

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

Pobierz plik referencyjny: ARAnchorManager

ARAnchorManager jest wymagane do rozwiązywania kotwic geoprzestrzennych w czasie działania, więc potrzebujesz też odniesienia do ARAnchorManager w scenie. Jeśli zaczęło się od aplikacji Geospatial Sample w pakiecie z rozszerzeniami ARCore, Anchor Menedżer jest połączony z „początkiem sesji AR” GameObject. Zakładając, że masz tylko jeden menedżer kotwicy, możesz uzyskać do niego odniesienia, takie jak to:

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

Po utworzeniu punktu początkowego i menedżera kotwicy możesz zacząć tworzyć ARGeospatialCreatorAnchor obiekty.

Utwórz kotwice terenu

Przyjrzyjmy się poniższej dwuwymiarowej tablicy wartości double, która reprezentuje dokładna szerokość i długość geograficzna w trzech punktach po wschodniej stronie Ratusz w San Francisco, Kalifornia, USA:

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ć sześcian o długości 1 metra w każdej z tych lokalizacji, na ziemi w naszej aplikacji AR. Ten kod tworzy ARGeospatialCreatorAnchor obiektów i przypisuje ich właściwości do odpowiednie 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 zostaną utworzone kotwice terenu. Twórca danych geoprzestrzennych automatycznie umieszcza kotwice w odpowiednich współrzędnych świata Unity, obliczając ich wartości w stosunku do obiektu ARGeospatialCreatorOrigin. Aby dostosować wysokość kotwicy terenu, ustaw właściwość Altitude w metrach nad lub pod powierzchnią terenu.

W trakcie działania kotwice terenu będą umieszczane na poziomie gruntu dla uruchomionej aplikacji. przesunięcia przez właściwość Altitude. W widoku sceny w edytorze są jednak renderowane na wysokości WGS84 domyślnie 0, a nie w odniesieniu do kafelka 3D geometrii. Często nie są tam, gdzie chcesz je widzieć, więc możesz zastąpić domyślną wysokość reklamy zakotwiczonej w widoku sceny edytora, ustawiając wartość właściwość UseEditorAltitudeOverride do ustawienia true i określanie wysokości w Liczniki 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ą skompilowane do działającej aplikacji.

Kotwica geoprzestrzenna na placu ratuszowym

Utwórz reklamę zakotwiczoną na dachu

Dla kolejnego kotwicy załóżmy, że chcesz umieścić reklamę zakotwiczoną na dachu miasta. Hall. Kotwica można utworzyć dokładnie w ten sam sposób, z wyjątkiem elementu AltitudeType właściwość 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 elementów zakotwiczonych terenowych, wysokość dachu możesz dostosować zakotwiczona w widoku sceny edytora za pomocą elementów UseEditorAltitudeOverride i Usługi: EditorAltitudeOverride. W tym przykładzie wysokość WGS84 a dach wynosi około 10,7 metra.

Kotwica geoprzestrzenna na dachu

Utwórz reklamę zakotwiczoną na określonej wysokości

Ostatni kotwica zostanie umieszczona na samej górze kopuły ratusza. Dla: dokładna wysokość jest ważna, więc musisz ją ustawić za pomocą reklamy zakotwiczonej WGS84, a nie zakotwiczenia terenu lub reklamy zakotwiczonej 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 ma potrzeby zastępowania wysokości tylko w edytorze, ponieważ wysokość jest już określone zgodnie z normą WGS84. Oczywiście, jeśli wysokość kafelków mapy geometria w edytorze okazała się błędna w porównaniu ze światem rzeczywistym, można nadal użyć zastąpienia z edytora, aby zmienić położenie kotwicy w scenie widok.

Kotwica geoprzestrzenna na kopule