Un ancla describe una ubicación y una orientación fijas en el mundo real. Si se adjunta un objeto a un ancla, este se mostrará de forma realista en el mundo real.
Crea una sesión de ARCore para Jetpack XR
Crea anclas a través de una sesión de ARCore para Jetpack XR. Consulta Comprende el ciclo de vida de una sesión para obtener un Session
.
Configura la sesión
Para crear y cargar anclas, no es necesario configurar la sesión. Sin embargo, la persistencia de anclas no está habilitada de forma predeterminada en las sesiones de XR. Para conservar y cargar anclas, configura la sesión:
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! */) }
Cómo fijar contenido a una ubicación fija en el espacio
Se crea un ancla con un Pose
, que se puede interpretar en relación con un Trackable
existente o no.
Crea un ancla en relación con un elemento rastreable
Cuando se crea un ancla en relación con un Trackable
, como un Plane
, que hace que el ancla siga el Trackable
adjunto cuando se mueve por el espacio.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Crea un ancla sin un elemento rastreable
Para crear un ancla que no esté unida a un Trackable
, haz lo siguiente:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Cómo adjuntar una entidad a un ancla
Para renderizar un modelo en esta ubicación, [crea un GltfModel
][5] y establece su elemento superior en un AnchorEntity
.
AnchorEntity.create(session, anchor).apply { setParent(session.activitySpace) addChild(entity) }
Información sobre TrackingState
Cada Trackable
tiene un TrackingState
que se debe verificar antes de usarlo.
Un Trackable
que tiene un TrackableState
de Tracking
tiene su Pose
actualizado de forma activa por el sistema. Un Trackable
que es Paused
puede convertirse en Tracking
en el futuro, mientras que uno que es Stopped
nunca se convertirá en Tracking
.
Cómo conservar un ancla durante las sesiones
Un ancla que no se conserva desaparece después de que se destruye una sesión. Cuando persistes un ancla, tu app recuerda la posición de esa ancla en sus datos privados de app. Este ancla se puede recuperar en una sesión posterior y se ancla en la misma ubicación del mundo.
Para conservar un ancla, usa anchor.persist()
como se muestra a continuación:
val uuid = anchor.persist()
Tu app puede recuperar el ancla con UUID
en una sesión futura:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Cuando ya no necesites un ancla, llama a
unpersist()
. Esto quita el ancla del almacenamiento de tu app y hace que el UUID determinado no se pueda recuperar para las llamadas a Anchor.load()
.
Anchor.unpersist(session, uuid)
Tu app también puede solicitar una lista de todos los anclajes que se conservaron y que aún están presentes en el almacenamiento de tu app:
val uuids = Anchor.getPersistedAnchorUuids(session)