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.
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 UseEditorAltitudeOverride
i EditorAltitudeOverride
. W tym przykładzie wysokość dachu w układzie WGS84 wynosi około 10, 7 metra.
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.