Ein Anker beschreibt eine feste Position und Ausrichtung in der realen Welt. Wenn Sie ein Objekt an einem Anker befestigen, sieht es so aus, als wäre es realistisch in der realen Welt platziert.
Auf eine Sitzung zugreifen
Erstellen Sie Anker über eine ARCore for Jetpack XR Session. Wenn Sie die räumliche Benutzeroberfläche mit Jetpack Compose for XR verbessern, greifen Sie über Jetpack Compose for XR auf eine Sitzung zu. Wenn Sie mit räumlichen Entitäten
aus der Jetpack SceneCore-Bibliothek arbeiten, greifen Sie über Jetpack XR
Runtime auf eine Sitzung zu.
Sitzung konfigurieren
Zum Erstellen und Laden von Ankern muss die Sitzung nicht konfiguriert werden.
Die Ankerpersistenz ist jedoch für XR‑Sitzungen nicht standardmäßig aktiviert. Wenn Sie Anker im lokalen Speicher beibehalten
und laden möchten, konfigurieren Sie die Sitzung und legen Sie den
AnchorPersistenceMode.LOCAL Modus fest:
val newConfig = session.config.copy( anchorPersistence = AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Inhalte an einer festen Position im Raum verankern
Ein Anker wird mit einem Pose erstellt, das relativ zu
einem vorhandenen Anchorable interpretiert werden kann oder nicht. Ein Anchorable ist ein Trackable
, an dem Anker befestigt werden können.
Anker relativ zu einem Anchorable erstellen
Wenn ein Anker relativ zu einem Anchorable erstellt wird, z. B. einer Plane, folgt der Anker dem angehängten Anchorable, wenn es sich im Raum bewegt.
when (val result = anchorable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Anker ohne Anchorable erstellen
So erstellen Sie einen Anker, der nicht an ein Anchorable 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 dieser Position rendern möchten, erstellen Sie ein GltfModel und legen Sie das übergeordnete Element auf eine AnchorEntity fest.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
TrackingState verstehen
Jedes Trackable hat einen TrackingState, der vor der Verwendung überprüft werden sollte.
Bei einem Trackable mit dem TrackableState Tracking wird die Pose aktiv
vom System aktualisiert. Ein Trackable mit dem Status Paused kann in Zukunft den Status Tracking erhalten, während ein Trackable mit dem Status Stopped niemals den Status Tracking erhalten wird.
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 nachfolgenden Sitzung abgerufen werden und wird an derselben Position in der Welt verankert.
Verwenden Sie Anchor.persist(), um einen Anker beizubehalten, wie hier gezeigt:
val uuid = anchor.persist()
Ihre App kann den Anker in einer zukünftigen Sitzung mit der 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 für
Aufrufe von Anchor.load() abgerufen werden.
Anchor.unpersist(session, uuid)
Ihre App kann auch eine Liste aller beibehaltenen Anker anfordern, die noch im Speicher Ihrer App vorhanden sind:
val uuids = Anchor.getPersistedAnchorUuids(session)