Une ancre décrit une position et une orientation fixes dans le monde réel. Attacher un objet à un ancrage 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 ancrages 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'ancrages ne nécessitent pas de configurer la session. Toutefois, la persistance des ancres n'est pas activée par défaut sur les sessions XR. Pour persister et charger des ancres, configurez la session:
val newConfig = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.Enabled, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigurePermissionsNotGranted -> TODO(/* The required permissions in result.permissions have not been granted. */) is SessionConfigureSuccess -> TODO(/* Success! */) }
Ancrer le 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 élément Trackable
Lorsqu'une ancre est créée par rapport à un Trackable
, tel qu'un Plane
, l'ancre suit le Trackable
associé 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 traceur
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é à un ancrage
Pour afficher un modèle à cet emplacement, créez un GltfModel
et définissez son parent sur un AnchorEntity
.
AnchorEntity.create(session, anchor).apply { setParent(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 la valeur 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 deviendra jamais Tracking
.
Persistance d'une ancre pendant les sessions
Une ancre qui n'est pas 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 dans une session ultérieure et est ancrée au même endroit dans le monde.
Pour conserver une ancre, utilisez Anchor.persist()
, comme indiqué ci-dessous:
val uuid = anchor.persist()
Votre application peut récupérer l'ancre à 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'une ancre, appelez unpersist()
. Cela supprime l'ancre du stockage de votre application et rend l'UUID donné introuvable pour les appels à Anchor.load()
.
Anchor.unpersist(session, uuid)
Votre application peut également demander la liste de tous les ancrages persistants qui sont toujours présents dans l'espace de stockage de votre application:
val uuids = Anchor.getPersistedAnchorUuids(session)