In diesem Leitfaden wird beschrieben, wie Sie mit Geospatial Creator C#-Scripts schreiben.
um häufige Aufgaben wie das Erstellen und Verschieben
ARGeospatialCreatorAnchor
Objekte im Bearbeitungsmodus von Unity. Dies kann nützlich sein,
Erstellen mehrerer Anker aus einer vordefinierten Liste wie einer Tabelle oder einer KML-Datei
-Datei.
Mit Geospatial Creator in Unity können Sie sich eine Vorschau raumbezogener Inhalte im Unity-Editor ansehen. Unsere Kurzanleitung stellt Geospatial Creator vor und zeigt, wie Sie Ihren ersten Raumbezogene AR-Funktionen mit minimalem Programmieraufwand mithilfe von Unity Editor-Benutzeroberfläche Bei komplexeren Projekten können Sie Geospatiale Creator-GameObjects werden programmatisch anstelle von Unity verwendet Editor-Benutzeroberfläche
In diesem Leitfaden wird davon ausgegangen, dass Sie mit den grundlegenden Konzepten von Geospatial Creator vertraut sind, die in der Kurzanleitung vorgestellt wurden, und dass Sie bereit sind, einer Szene Geospatial Creator-Markierungen hinzuzufügen. Geospatial Creator muss aktiviert sein und die mit Ihren API-Schlüsseln konfiguriert sind, sowie die anfänglichen AR-Sitzungsobjekte in Ihrem Szene. Wenn Sie ganz von vorn beginnen, folgen Sie der Kurzanleitung bis einschließlich der „Räumlich-geografischen Daten aktivieren“ Creator“ bevor Sie fortfahren.
Erste Schritte
Nehmen wir für dieses Beispiel an, dass sich einige bekannte Orte um das Rathaus in der in dem Sie AR-Inhalte platzieren möchten. Sie müssen an jedem dieser Orte Ankerobjekte erstellen und diesen dann einfache Geometrie zuweisen.
Bevor Sie Anker erstellen können, müssen Sie ein
ARGeospatialCreatorOrigin
, der ein Bezugspunkt für die Konvertierung ist
Breiten-, Längengrad- und Höhenangaben zu und von den Unity-Weltkoordinaten.
Der Ursprung enthält außerdem eine CesiumGeoreference
-Unterkomponente und eine
Untergeordnetes Cesium3DTileset
-Objekt, das es Cesium ermöglicht, die umgebende
in der Szenenansicht des Unity-Editors. Dafür benötigen Sie eine Google Maps-Karte.
Tiles API-Schlüssel, wie in den
Kurzanleitung
Ursprung erstellen
Die API für Geospatial Creator enthält eine Fabrikmethode, mit der eine ARGeospatialCreatorOrigin
in der Szene erstellt und die erforderlichen Cesium-Komponenten hinzugefügt werden können.
Mit dem folgenden Code wird der Ursprung an einem nahe gelegenen Breiten-, Längengrad und
Höhe und mithilfe des gegebenen Map Tiles API-Schlüssels:
ARGeospatialCreatorOrigin origin =
GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");
Standardmäßig wird dieses Objekt in Unity-Weltkoordinaten an (0, 0, 0) platziert, was für dieses Beispiel gut funktioniert.
ARAnchorManager
-Referenz abrufen
Ein ARAnchorManager
ist erforderlich, um raumbezogene Anker zur Laufzeit aufzulösen.
benötigen auch einen Verweis auf das ARAnchorManager
in der Szene. Wenn Sie mit
die mit ARCore-Erweiterungen gebündelte Geospatial Sample-Anwendung, die Anchor
Manager ist mit „Ursprung der AR-Sitzung“ verknüpft GameObject an. Angenommen, Sie haben genau einen Anchor-Manager in Ihrer Szene, können Sie so auf ihn verweisen:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Da Sie nun einen Ursprung und einen Ankermanager haben, können Sie mit dem Erstellen des
ARGeospatialCreatorAnchor
-Objekte.
Geländeanker erstellen
Betrachten Sie das folgende zweidimensionale double
-Array, das die genaue geografische Breite und Länge an drei Punkten auf der ostseitigen Seite des Rathauses in San Francisco, Kalifornien, USA, darstellt:
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
Angenommen, Sie möchten in unserer AR-Anwendung an jedem dieser Orte auf Bodenhöhe einen Würfel mit einem Meter Kantenlänge platzieren. Der folgende Code erstellt
ARGeospatialCreatorAnchor
-Objekten und weist ihre Eigenschaften dem
geeignete Werte:
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;
}
Dadurch werden an jedem Punkt Geländeanker erstellt. Geospatial Creator wird automatisch erstellt
platziert die Anker an den entsprechenden Unity-Weltkoordinaten, indem ihre
Standort relativ zum ARGeospatialCreatorOrigin
-Objekt. So passen Sie die
Höhe eines Geländeankers haben Sie die Eigenschaft Altitude
in Metern über oder
unter der Geländeoberfläche zu sehen.
Bei der Laufzeit werden Geländeanker auf Bodenhöhe für die laufende App aufgelöst, wobei sie um die Altitude
-Property versetzt werden. In der Szenenansicht des Editors werden sie jedoch standardmäßig mit einer WGS84-Höhe von 0 gerendert, nicht relativ zur Geometrie der 3D-Kachel. Diese werden häufig nicht angezeigt, daher können Sie die
Standardhöhe des Ankers in der Szenenansicht des Editors durch Festlegen des
UseEditorAltitudeOverride
auf true
und gibt die Höhe in
WGS84-Messgeräte mit der Eigenschaft EditorAltitudeOverride
:
anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza
Diese beiden Eigenschaften haben keine Auswirkungen außerhalb des Editormodus und werden nicht in die laufende App kompiliert.
Dachanker erstellen
Angenommen, Sie möchten als Nächstes einen Anker auf dem Dach des Rathauses platzieren. Der Anker kann auf die gleiche Weise erstellt werden, mit Ausnahme des AltitudeType
-Objekts.
ist auf AnchorAltitudeType.Rooftop
festgelegt:
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;
Ähnlich wie bei den Geländeankern können Sie die Höhe eines Dachankers in der Szenenanzeige des Editors mithilfe der Properties UseEditorAltitudeOverride
und EditorAltitudeOverride
optimieren. In diesem Beispiel ist die WGS84-Höhe des
beträgt ca.10,7 Meter.
Anker auf einer bestimmten Höhe erstellen
Der letzte Anker wird ganz oben auf der Kuppel des Rathauses platziert. Für ist die genaue Höhe wichtig, daher legen Sie sie explizit durch mit einem WGS84-Anker anstelle eines Gelände- oder Dachankers:
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;
Es ist nicht nötig, die reine Editor-Höhenüberschreibung zu verwenden, da die Höhe die bereits gemäß WGS84 angegeben sind. Wenn sich die Höhe der Kartenkacheln-Geometrie im Editor im Vergleich zur realen Welt als falsch herausstellt, können Sie den Anker natürlich auch über die Override-Funktion im Editor in der Szenenansicht neu positionieren.