Une ancre décrit une position et une orientation fixes dans le monde réel. Attacher un objet à une ancre permet de le placer de manière réaliste dans le monde réel.
Créer une session ARCore pour Jetpack XR
Créez des ancres via une session ARCore pour Jetpack XR. Consultez Comprendre le cycle de vie d'une session pour obtenir un Session
.
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 les ancres à partir du stockage local, configurez la session et définissez le mode AnchorPersistenceMode.LOCAL
:
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. */) }
Ancrer du contenu à un emplacement fixe dans l'espace
Une ancre est créée à l'aide d'un Pose
, qui peut être interprété par rapport à un Trackable
existant ou non.
Créer une ancre par rapport à un objet Trackable
Lorsqu'une ancre est créée par rapport à un Trackable
, tel qu'un Plane
, l'ancre suit le Trackable
auquel elle est associée lorsqu'il se déplace dans l'espace.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Créer une ancre sans objet suivi
Pour créer une ancre qui n'est pas associée à un Trackable
:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Associer une entité à une ancre
Pour afficher un modèle à cet emplacement, créez un GltfModel
et définissez son parent sur un AnchorEntity
.
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 défini sur Tracking
voit son Pose
activement mis à jour par le système. Un Trackable
Paused
peut devenir Tracking
à l'avenir, alors qu'un Stopped
ne le deviendra jamais.Tracking
Conserver une ancre tout au long des sessions
Une ancre non persistante disparaît après la destruction d'une session. En persistant une ancre, votre application mémorise la position de cette ancre 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 rendre une ancre persistante, utilisez Anchor.persist()
comme indiqué ci-dessous :
val uuid = anchor.persist()
Votre application peut récupérer l'ancrage à l'aide de 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'un ancrage, appelez unpersist()
. Cela supprime l'ancrage 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 persistantes qui sont toujours présentes dans le stockage de votre application :
val uuids = Anchor.getPersistedAnchorUuids(session)