Ein Anker beschreibt einen festen Standort und eine feste Ausrichtung in der realen Welt. Wenn Sie ein Objekt an einem Anker anhängen, wirkt es realistischer.
ARCore für Jetpack XR-Sitzung erstellen
Erstellen Sie Anker über eine ARCore-für-Jetpack XR-Sitzung. Weitere Informationen zum Abrufen einer Session
finden Sie unter Lebenszyklus einer Sitzung.
Sitzung konfigurieren
Zum Erstellen und Laden von Ankern muss die Sitzung nicht konfiguriert werden. Die Ankerspeicherung ist jedoch in XR-Sitzungen nicht standardmäßig aktiviert. Wenn Sie Anker speichern und laden möchten, konfigurieren Sie die Sitzung:
val newConfig = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.Enabled, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigurePermissionsNotGranted -> TODO(/* The required permissions in result.permissions have not been granted. */) is SessionConfigureSuccess -> TODO(/* Success! */) }
Inhalte an einem festen Ort im Raum verankern
Ein Anker wird mit einem Pose
erstellt, der relativ zu einem vorhandenen Trackable
interpretiert werden kann oder nicht.
Anker relativ zu einem Trackable erstellen
Ein Anker wird relativ zu einem Trackable
erstellt, z. B. einem Plane
. Dadurch folgt der Anker dem angehängten Trackable
, wenn er sich durch den Raum bewegt.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Anker ohne Trackable erstellen
So erstellen Sie einen Anker, der nicht an eine Trackable
angehängt ist:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Entität an einen Anker anhängen
Wenn Sie ein Modell an diesem Ort rendern möchten, [erstellen Sie ein GltfModel
][5] und legen Sie als übergeordnetes Element ein AnchorEntity
fest.
AnchorEntity.create(session, anchor).apply { setParent(session.activitySpace) addChild(entity) }
TrackingState
Jede Trackable
hat eine TrackingState
, die vor der Verwendung geprüft werden sollte.
Bei einem Trackable
mit einer TrackableState
von Tracking
wird die Pose
vom System aktiv aktualisiert. Ein Trackable
mit dem Wert Paused
kann in Zukunft zu Tracking
werden, während ein Trackable
mit dem Wert Stopped
niemals zu Tracking
wird.
Anker während der Sitzungen beibehalten
Ein nicht persistenter Anker verschwindet, nachdem eine Sitzung beendet wurde. Wenn Sie einen Anker speichern, merkt sich Ihre App die Position dieses Ankers in den privaten App-Daten. Dieser Anker kann in einer nachfolgenden Sitzung abgerufen werden und ist an demselben Ort auf der Welt verankert.
Wenn Sie einen Anker dauerhaft speichern möchten, verwenden Sie anchor.persist()
, wie hier gezeigt:
val uuid = anchor.persist()
Ihre App kann den Anker mithilfe von UUID
in einer zukünftigen Sitzung abrufen:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Wenn Sie den Anker nicht mehr benötigen, rufen Sie unpersist()
an. Dadurch wird der Anker aus dem Speicher Ihrer App entfernt und die angegebene UUID kann nicht mehr für Aufrufe von Anchor.load()
abgerufen werden.
Anchor.unpersist(session, uuid)
Ihre App kann auch eine Liste aller gespeicherten Anker anfordern, die sich noch im Speicher Ihrer App befinden:
val uuids = Anchor.getPersistedAnchorUuids(session)