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

Z tego przewodnika dowiesz się, jak używać Geospatial Creator do pisania skryptów C#, aby szybko wykonywać typowe czynności, takie jak tworzenie i przenoszenie obiektów ARGeospatialCreatorAnchor w trybie edycji w Unity. Może to być przydatne do tworzenia wielu kotwic z użyciem zdefiniowanej wstępnie 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ć 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 w tych miejscach należy utworzyć obiekty zakotwiczone, a następnie 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 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 przy użyciu podanego klucza Map Tiles API:

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 referencję ARAnchorManager

ARAnchorManager jest wymagany do rozwiązywania kotwic geoprzestrzennych w czasie działania, dlatego musisz też umieścić w scenie odniesienie do ARAnchorManager. 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” Obiekt GameObject. Zakładając, że masz dokładnie 1 punkt kotwiczenia w scenie, 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.

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ć w naszej aplikacji AR sześcian o boku 1 m w każdej z tych lokalizacji na poziomie gruntu. 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. 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 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ą one jednak domyślnie renderowane na wysokości 0 w układzie WGS84, a nie w układzie współrzędnych geometrii płytki 3D. 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.

Geospatial Anchor na placu przed Ratuszem

Utwórz reklamę zakotwiczoną na dachu

Dla kolejnego kotwicy załóżmy, że chcesz umieścić reklamę zakotwiczoną na dachu miasta. Hall. Kotwicę można utworzyć w ten sam sposób, z tym że w przypadku właściwości AltitudeType ustawiono 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 UseEditorAltitudeOverrideEditorAltitudeOverride. 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. W przypadku tego kotwicy ważna jest dokładna wysokość, dlatego musisz ją ustawić wyraźnie, używając kotwicy WGS84 zamiast kotwicy terenu lub 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ść 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