Ein Anker beschreibt einen Ort und eine Ausrichtung in der realen Welt. Wenn Sie ein Objekt an einen Anker anhängen, wird es realistisch in der realen Welt platziert. Außerdem kann Ihre App dadurch Strom sparen, da die Logik nicht bei jedem Frame ausgeführt werden muss.
Auf eine Sitzung zugreifen
Erstellen Sie Anker über eine ARCore for Jetpack XR Session. Wenn Sie
die räumliche UI 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 in XR‑Sitzungen standardmäßig nicht 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 = Config.Builder(session.config) .setAnchorPersistence(AnchorPersistenceMode.LOCAL) .build() 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 einem Ort im Raum verankern
Ein Anker wird mit einem Pose erstellt, das relativ zu
einem vorhandenen Anchorable interpretiert oder in der Welt fixiert werden kann. Ein Anchorable ist ein
Trackable, an das Anker angehängt werden können.
Anker relativ zu einem Anchorable erstellen
Wenn ein Anker relativ zu einem Anchorable wie einer Plane erstellt wird, folgt der Anker dem angehängten Anchorable, wenn es sich im Raum bewegt.
val anchor = plane.createAnchor(pose)
Anker in der Welt fixieren
Wenn Sie einen Anker erstellen möchten, der in der Welt fixiert ist, hängen Sie ihn nicht an ein Anchorable an. Verwenden Sie diesen Ankertyp nur für Punkte, die im Raum schweben, da sich die Schätzung der Sitzung, wo sich unbewegliche Objekte befinden, im Laufe der Zeit ändert:
val anchor = Anchor.create(session, pose)
Entität an einen Anker anhängen
Wenn Sie ein Modell an diesem Ort rendern möchten, erstellen Sie ein GltfModel und legen Sie das übergeordnete Element auf AnchorSpace fest.
AnchorSpace.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
TrackingState
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 mit dem Status Stopped niemals den Status Tracking erhalten wird.
Anker für alle Sitzungen 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 und an derselben Stelle in der Welt verankert werden.
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)