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ę.
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.
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.