Crea e modifica in modo programmatico gli ancoraggi in Creator geospaziale in Unity

Questa guida descrive come utilizzare Geospatial Creator per scrivere script C# per svolgere rapidamente attività comuni come creare e spostare ARGeospatialCreatorAnchor oggetti in modalità di modifica di Unity. Questo può essere utile per creando più ancoraggi da un elenco predefinito come un foglio di lavoro o un file KML .

La funzionalità di creazione di contenuti geospaziali in Unity ti consente di visualizzare l'anteprima dei contenuti geospaziali in l'editor Unity. La nostra guida rapida presenta Geospatial Creator e ti spiega come creare Esperienza AR con supporto geospaziale con programmazione minima, tramite Unity UI dell'editor. Per i progetti più avanzati, potresti voler creare e modificare GameObject per creator geospaziali in modo programmatico invece di utilizzare Unity UI dell'editor.

Questa guida presuppone che tu abbia familiarità con i concetti di base dei creator di contenuti geospaziali che abbiamo introdotto nella Guida rapida. Inoltre, sei pronto per iniziare ad aggiungere contenuti geospaziali Il creator è ancorato a una scena. Devi avere abilitato Geospatial Creator e configurate con le chiavi API, nonché gli oggetti della sessione AR iniziali nel scena. Se inizi da zero, segui la guida rapida attraverso e inclusa la colonna "Attiva dati geospaziali Autore" prima di continuare.

Per iniziare

Per questo esempio, supponiamo che tu abbia un insieme di luoghi noti intorno al municipio di San Francisco, California, USA, in cui vuoi inserire i contenuti AR. Potrai creare oggetti di ancoraggio in ognuna di queste posizioni e poi collegare gli oggetti la geometria di questi ancoraggi.

Prima di poter creare gli ancoraggi, devi specificare un ARGeospatialCreatorOrigin, che è un punto di riferimento per la conversione latitudini, longitudini e altitudini da e verso le coordinate del mondo Unity. L'origine conterrà anche un sottocomponente CesiumGeoreference e un Oggetto secondario Cesium3DTileset, che consente a Cesium di eseguire il rendering dell'oggetto circostante nella visualizzazione Scena dell'editor di Unity. A questo scopo, hai bisogno di una mappa di Google la chiave API Tiles come descritto in la guida rapida

Crea un'origine

L'API per Geospatial Creator include un metodo di fabbrica per creare ARGeospatialCreatorOrigin nella scena e aggiungi i componenti Cesium richiesti. Il seguente codice crea l'origine a latitudine, longitudine e longitudine nelle vicinanze di altitudine e utilizzando la chiave API Map Tiles specificata:

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

Per impostazione predefinita, questo oggetto è posizionato su (0, 0, 0) nelle coordinate del mondo Unity, ovvero funziona bene per questo esempio.

Ottieni il riferimento ARAnchorManager

Un ARAnchorManager necessaria per risolvere gli ancoraggi geospaziali in fase di runtime, quindi anche un riferimento a ARAnchorManager nella scena. Se hai iniziato con l'applicazione di esempio Geospaziale in bundle con le estensioni ARCore, Il gestore è collegato a "Origine sessione AR" GameObject. Supponendo che tu abbia un gestore dell'ancoraggio nella scena, puoi ottenere un riferimento, questo:

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

Ora che hai un'origine e un gestore degli ancoraggi, puoi iniziare a creare ARGeospatialCreatorAnchor oggetti.

Crea ancoraggi al terreno

Considera il seguente array bidimensionale di valori double, che rappresenta latitudine e longitudine precise di tre punti sul lato rivolto a est di Municipio di San Francisco, California, 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

Supponiamo di voler posizionare un cubo di un metro in ognuna di queste posizioni, a terra nella nostra applicazione AR. Il seguente codice crea ARGeospatialCreatorAnchor oggetto e assegna le relative proprietà al valori appropriati:

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;
}

In questo modo vengono creati ancoraggi del terreno in ogni punto. Creatore geospaziale automaticamente posiziona gli ancoraggi nelle coordinate del mondo Unity, calcolando il loro posizione relativa all'oggetto ARGeospatialCreatorOrigin. Per regolare altitudine di un ancoraggio del terreno, imposta la proprietà Altitude in metri sopra o sotto la superficie del terreno.

In fase di runtime, gli ancoraggi del terreno si risolvono a livello del suolo per l'app in esecuzione. compensato dalla proprietà Altitude. Nella visualizzazione scena dell'Editor, invece, eseguire il rendering a un'altitudine WGS84 pari a 0 per impostazione predefinita, non relativa al riquadro 3D la geometria di testo. Spesso non è la posizione in cui vorresti vederli, quindi puoi sostituire il valore altitudine predefinita dell'ancoraggio nella visualizzazione scena dell'Editor impostando il parametro proprietà UseEditorAltitudeOverride in true e specifica l'altitudine in WGS84 metri che utilizzano la proprietà EditorAltitudeOverride:

anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza

Queste due proprietà non hanno effetto al di fuori della modalità Editor e non sono compilati nell'app in esecuzione.

Ancora geospaziale nella piazza del municipio

Crea un ancoraggio sul tetto

Per il prossimo ancoraggio, supponi di voler posizionare un'ancora sul tetto della città Hall. L'ancoraggio può essere creato nello stesso modo, ad eccezione di AltitudeType è impostata su 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;

Come per gli ancoraggi del terreno, puoi regolare l'altitudine di un tetto per il ancoraggio nella visualizzazione scena dell'editor utilizzando UseEditorAltitudeOverride e EditorAltitudeOverride proprietà. Per questo esempio, l'altitudine WGS84 della di circa 10,7 metri.

Ancoraggio geospaziale sul tetto

Creare un ancoraggio a un'altitudine specifica

L'ultima ancora sarà posizionata in cima alla cupola del municipio. Per questo ancoraggio, l'altitudine esatta è importante, quindi la imposterai in modo esplicito utilizzando un ancoraggio WGS84 al posto di un ancoraggio del terreno o sul tetto:

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;

Non è necessario utilizzare la sostituzione di altitudine solo per l'editor, poiché l'altitudine è è già specificato in base a WGS84. Naturalmente, se l'altezza dei riquadri della mappa la geometria dell'editor si è rivelata errata rispetto al mondo reale, puoi sempre usare la sostituzione dell'editor per riposizionare l'ancoraggio nella scena vista.

Ancoraggio geospaziale sulla cupola