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 dem Geospatial Creator in Unity können Sie sich eine Vorschau raumbezogener Inhalte in den Unity-Editor öffnen. 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. in der Kurzanleitung vorgestellt. Jetzt können Sie raumbezogene Der Creator verankert sich in einer Szene. 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 werden an jedem dieser Positionen Ankerobjekte erstellen und dann einfache Geometrie zu diesen Ankern.
Bevor Sie Anker erstellen können, müssen Sie einen
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 Factory-Methode zum Erstellen eines
ARGeospatialCreatorOrigin
in der Szene und fügen Sie die erforderlichen Cesium-Komponenten hinzu.
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 bei (0, 0, 0) in Unity-Weltkoordinaten 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. Angenommen, Sie haben
genau einen Ankermanager in Ihrer Szene haben, können Sie einen Verweis darauf erhalten,
dies:
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
Sehen Sie sich das folgende zweidimensionale Array von double
-Werten an, die für
den genauen Breiten- und Längengrad an drei Punkten auf der Ostseite eines
Rathaus in San Francisco, Kalifornien, 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
Angenommen, du möchtest an jedem dieser Orte einen 1 Meter großen Würfel auf dem Boden platzieren.
in unserer AR-Anwendung. 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 ab.
Zur Laufzeit werden Geländeanker für die laufende App auf Bodenhöhe aufgelöst.
durch die Eigenschaft Altitude
versetzt. In der Szenenansicht des Editors
Standardmäßig in einer WGS84-Höhe von 0 dargestellt und nicht relativ zur 3D-Kachel
Geometrie. 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
Nehmen wir als Nächstes an, Sie möchten einen Anker auf dem Dach von City platzieren.
Hall. 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 Geländeankern können Sie die Höhe eines Dächers feinabstimmen.
in der Szenenansicht des Editors mit den UseEditorAltitudeOverride
- und
EditorAltitudeOverride
-Properties. In diesem Beispiel ist die WGS84-Höhe des
beträgt ca.10,7 Meter.
Anker in einer bestimmten Höhe erstellen
Unser letzter 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 die Höhe der Kartenkacheln Geometrie im Editor im Vergleich zur realen Welt als falsch erwiesen, können Sie immer noch die Editor-Überschreibung verwenden, um den Anker in der Szene neu zu positionieren. Ansicht.