Une ancre décrit un emplacement et une orientation dans le monde réel. Associer un objet à une ancre permet aux objets d'apparaître de manière réaliste dans le monde réel et à votre application d'économiser de l'énergie en n'ayant pas à exécuter de logique à chaque frame.
Accéder à une session
Créez des ancres via un 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 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 fixée dans le monde. 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, cela permet à l'ancre de suivre l'Anchorable associé lorsqu'il se déplace dans l'espace.
val anchor = plane.createAnchor(pose)
Créer une ancre fixe dans le monde
Pour créer une ancre fixe dans le monde, ne l'associez pas à un Anchorable. N'utilisez ce type d'ancre que pour les points qui flottent dans l'espace, car l'estimation de la session de l'emplacement des objets immobiles change au fil du temps :
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.
AnchorSpace.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 mis à jour activement
par le système. Un Trackable qui est Paused peut devenir Tracking à l'avenir, tandis qu'un Stopped ne le deviendra jamais Tracking.
Conserver une ancre tout au long des sessions
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 le stockage de votre application :
val uuids = Anchor.getPersistedAnchorUuids(session)