Anker in Geospatial Creator in Unity programmatisch erstellen und bearbeiten

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.

Raumanker im City Hall Plaza

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 der 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.

Raumbezogener Anker auf dem Dach

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.

Raumbezogener Anker an der Kuppel