Créer des ancrages avec ARCore pour Jetpack XR

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires

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.

Accéder à une session

Créez des ancres via un Session ARCore pour Jetpack XR. Si vous améliorez l'UI spatiale à l'aide de Jetpack Compose for XR, accédez à une session depuis Jetpack Compose for XR. Si vous travaillez avec des entités spatialisées de la bibliothèque Jetpack SceneCore, accédez à une session depuis Jetpack XR Runtime.

Configurer la session

La création et le chargement d'ancres ne nécessitent pas de configurer 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 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é 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 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 élément Trackable

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 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 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)