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 progetti più avanzati, ti consigliamo di creare e manipolare gli oggetti GameObject di Geospatial Creator tramite programmazione anziché utilizzare l'interfaccia utente di Unity Editor.
Questa guida presuppone che tu abbia familiarità con i concetti di base di Geospatial Creator introdotti nella guida rapida e che tu sia pronto per iniziare ad aggiungere ancore di Geospatial Creator a una scena. Devi aver attivato e configurato Geospatial Creator con le tue chiavi API, nonché gli oggetti della sessione AR iniziale nella scena. Se parti da zero, segui la Guida rapida, inclusa la sezione "Attiva Creatore di dati geografici", prima di continuare.
Per iniziare
Per questo esempio, supponiamo che tu abbia un insieme di località note intorno al municipio di San Francisco, in California, Stati Uniti, in cui vuoi posizionare contenuti AR. Dovrai creare oggetti di ancoraggio in ciascuna di queste posizioni e poi collegare la geometria di base a 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, ti serve 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 codice seguente crea l'origine a una latitudine, longitudine e altitudine vicine e utilizza 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 inclusa in ARCore Extensions, Anchor
Manager è associato all'oggetto GameObject "AR Session Origin". Supponendo di avere esattamente un gestore di ancoraggio nella scena, puoi ottenere un riferimento come 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
di oggetti 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.
Durante l'esecuzione, gli ancoraggi del terreno verranno risolti a livello del suolo per l'app in esecuzione, compensati dalla proprietà Altitude
. Tuttavia, nella visualizzazione della scena dell'editor, per impostazione predefinita vengono visualizzati a un'altitudine WGS84 pari a 0, non in base alla geometria della scheda 3D. Spesso non è dove vorresti vederli, quindi puoi sostituire l'altezza predefinita dell'ancora nella visualizzazione della scena di Editor impostando la proprietà UseEditorAltitudeOverride
su true
e specificando l'altezza in metri WGS84 utilizzando 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.
Crea un ancoraggio sul tetto
Per il prossimo riferimento, supponiamo che tu voglia posizionarne uno sul tetto del municipio. L'ancora può essere creata nello stesso modo, tranne per il fatto che la proprietà 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'altezza WGS84 del roof è di circa 10,7 metri.
Creare un ancoraggio a un'altitudine specifica
L'ultima ancora sarà posizionata in cima alla cupola del municipio. Per questo ancora, l'altitudine esatta è importante, quindi dovrai impostarla esplicitamente utilizzando un'ancora WGS84 anziché un'ancora sul tetto o sul terreno:
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 l'override dell'altitudine solo per l'editor, poiché l'altitudine è già specificata in base a WGS84. Ovviamente, se l'altezza della geometria dei riquadri della mappa nell'editor risulta non corretta rispetto al mondo reale, puoi comunque utilizzare l'override dell'editor per riposizionare l'ancora nella visualizzazione della scena.