Ein Anker beschreibt einen festen Ort und eine feste Ausrichtung in der realen Welt. Wenn Sie ein Objekt an einen Anker anfügen, wird es realistisch in der realen Welt platziert.
ARCore für Jetpack XR-Sitzung erstellen
Anker über eine ARCore für Jetpack XR-Sitzung erstellen 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 Ankerpersistenz ist jedoch nicht standardmäßig für XR-Sitzungen aktiviert. Wenn Sie Anker im lokalen Speicher speichern und daraus laden möchten, konfigurieren Sie die Sitzung und legen Sie den Modus AnchorPersistenceMode.LOCAL
fest:
val newConfig = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
Inhalte an einer festen Position im Raum verankern
Ein Anker wird mit einem Pose
erstellt, das relativ zu einem vorhandenen Trackable
interpretiert werden kann oder nicht.
Anker relativ zu einem Trackable erstellen
Wenn ein Anker relativ zu einem Trackable
erstellt wird, z. B. einem Plane
, folgt der Anker dem angehängten Trackable
, wenn es sich im 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 ein 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
Um ein Modell an diesem Ort zu rendern, erstellen Sie ein GltfModel
und legen Sie das übergeordnete Element auf ein AnchorEntity
fest.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
TrackingState
Jede Trackable
hat eine TrackingState
, die vor der Verwendung geprüft werden sollte.
Bei einem Trackable
mit einem TrackableState
von Tracking
wird das Pose
aktiv vom System aktualisiert. Ein Trackable
, das Paused
ist, kann in Zukunft Tracking
werden, während ein Trackable
, das Stopped
ist, nie Tracking
werden kann.
Anker über Sitzungen hinweg beibehalten
Ein Anker, der nicht beibehalten wird, verschwindet, nachdem eine Sitzung beendet wurde. Wenn Sie einen Anker beibehalten, speichert Ihre App die Position des Ankers in ihren privaten App-Daten. Dieser Anker kann in einer späteren Sitzung abgerufen werden und befindet sich am selben Ort.
Wenn Sie einen Anker beibehalten möchten, verwenden Sie Anchor.persist()
, wie hier gezeigt:
val uuid = anchor.persist()
Ihre App kann den Anker in einer zukünftigen Sitzung mit UUID
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 einen Anker nicht mehr benötigen, rufen Sie unpersist()
auf. Dadurch wird der Anker aus dem Speicher Ihrer App entfernt und die angegebene UUID kann nicht mehr durch Aufrufe von Anchor.load()
abgerufen werden.
Anchor.unpersist(session, uuid)
Ihre App kann auch eine Liste aller persistenten Anker anfordern, die noch im Speicher Ihrer App vorhanden sind:
val uuids = Anchor.getPersistedAnchorUuids(session)