Une ancre décrit un emplacement et une orientation fixes dans le monde réel. Associer un objet à une ancre permet de le placer de manière réaliste dans le monde réel.
Accéder à une session
Créez des ancres via une ARCore pour Jetpack XR Session. Si vous
améliorez l'interface utilisateur spatiale à l'aide de Jetpack Compose pour XR, accédez à une session à partir de
Jetpack Compose pour XR. Si vous utilisez des entités spatialisées
à partir de la bibliothèque Jetpack SceneCore, accédez à une session à partir de Jetpack XR
Runtime.
Configurer la session
La création et le chargement d'ancres ne nécessitent pas la configuration de la session.
Toutefois, la persistance des ancres n'est pas activée par défaut dans les sessions XR. Pour conserver
et charger des ancres à partir du stockage local, configurez la session et définissez le
AnchorPersistenceMode.LOCAL mode :
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. */) }
Ancrer du contenu à un emplacement fixe dans l'espace
Une ancre est créée à l'aide d'un Pose, qui peut être interprétée par rapport à
un Anchorable existant ou non. Un Anchorable est un Trackable
auquel des ancres peuvent être associées.
Créer une ancre par rapport à un Anchorable
Lorsqu'une ancre est créée par rapport à un Anchorable, tel qu'un Plane, l'ancre suit le Anchorable associé lorsqu'il se déplace dans l'espace.
val anchor = plane.createAnchor(pose)
Créer une ancre sans Anchorable
Pour créer une ancre qui n'est pas associée à un Anchorable :
val anchor = Anchor.create(session, pose)
Associer une entité à une ancre
Pour afficher un modèle à cet emplacement, créez un GltfModel et définissez son
parent sur un AnchorSpace.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Comprendre TrackingState
Chaque Trackable possède un TrackingState qui doit être vérifié avant d'être utilisé.
Un Trackable dont le TrackableState est Tracking voit son Pose activement
mis à jour par le système. Un Trackable qui est Paused peut devenir Tracking à l'avenir, tandis qu'un Trackable qui est Stopped ne deviendra jamais Tracking.
Conserver une ancre d'une session à l'autre
Une ancre qui n'est pas conservée disparaît après la destruction d'une session. En conservant une ancre, votre application mémorise sa position dans ses données d'application privées. Cette ancre peut être récupérée lors d'une session ultérieure et est ancrée au même endroit dans le monde.
Pour conserver une ancre, utilisez Anchor.persist(), comme indiqué ici :
val uuid = anchor.persist()
Votre application peut récupérer l'ancre à l'aide de la UUID lors d'une session ultérieure :
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Lorsque vous n'avez plus besoin d'une ancre, appelez unpersist(). Cela supprime
l'ancre du stockage de votre application et rend l'UUID donné irrécupérable pour
les appels à Anchor.load().
Anchor.unpersist(session, uuid)
Votre application peut également demander une liste de toutes les ancres conservées qui sont toujours présentes dans son stockage :
val uuids = Anchor.getPersistedAnchorUuids(session)