Un objeto Anchor describe una ubicación y orientación fijas en el mundo real. Adjuntar un objeto a un ancla ayuda a que los objetos parezcan colocados de forma realista en el mundo real.
Accede a una sesión
Crea anclajes a través de un Session de ARCore para Jetpack XR. Si vas a mejorar la IU espacial con Jetpack Compose para XR, accede a una sesión desde Jetpack Compose para XR. Si trabajas con entidades espacializadas de la biblioteca de Jetpack SceneCore, accede a una sesión desde el tiempo de ejecución de Jetpack XR.
Configura la sesión
No es necesario configurar la sesión para crear y cargar anclajes.
Sin embargo, la persistencia de anclajes no está habilitada de forma predeterminada en las sesiones de XR. Para conservar y cargar anclajes desde el almacenamiento local, configura la sesión y establece el modo AnchorPersistenceMode.LOCAL:
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. */) }
Ancla el 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 Anchorable existente o no. Un objeto Anchorable es un objeto Trackable que puede tener anclajes adjuntos.
Crea un ancla relativa a un elemento Anchorable
Cuando se crea un ancla en relación con un Anchorable, como un Plane, lo que hace que el ancla siga al Anchorable adjunto cuando se mueve por el espacio.
val anchor = plane.createAnchor(pose)
Crea un ancla sin un elemento Anchorable
Para crear un ancla que no esté adjunta a un Anchorable, haz lo siguiente:
val anchor = Anchor.create(session, pose)
Cómo adjuntar una entidad a un anclaje
Para renderizar un modelo en esta ubicación, crea un GltfModel y establece su elemento principal en un AnchorSpace.
AnchorEntity.create(session, anchor).apply { parent = session.scene.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 en todas las sesiones
Un ancla que no se persiste desaparece después de que se destruye una sesión. Cuando persiste un ancla, tu app recuerda la posición de ese ancla en sus datos de app privados. Esta 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 aquí:
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 hayan conservado y que aún estén presentes en el almacenamiento de la app:
val uuids = Anchor.getPersistedAnchorUuids(session)