Un ancla describe una ubicación y orientación fijas en el mundo real. Conectar 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 anclas a través de un ARCore para Jetpack XR Session. Si mejoras 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 Jetpack XR
Runtime.
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 realidad extendida. Para conservar
y cargar anclas desde el almacenamiento local, configura la sesión y establece el
AnchorPersistenceMode.LOCAL modo:
val newConfig = session.config.copy( anchorPersistence = 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. */) }
Ancla contenido a una ubicación fija en el espacio
Un ancla se crea con un Pose, que se puede interpretar en relación con
un Anchorable existente o no. Un Anchorable es un Trackable
al que se le pueden conectar anclas.
Crea un ancla en relación con un Anchorable
Cuando se crea un ancla en relación con un Anchorable, como un Plane, el ancla sigue al Anchorable conectado cuando se mueve por el espacio.
when (val result = anchorable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Crea un ancla sin un Anchorable
Para crear un ancla que no esté conectada a un Anchorable, haz lo siguiente:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Conecta una entidad a un ancla
Para renderizar un modelo en esta ubicación, crea un GltfModel y establece su
elemento superior en un AnchorEntity.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Comprende TrackingState
Cada Trackable tiene un TrackingState que se debe verificar antes de usarse.
Un Trackable que tiene un TrackableState de Tracking tiene su Pose actualizada de forma activa
por el sistema. Un Trackable que está Paused puede convertirse en Tracking en el futuro, mientras que uno que está Stopped nunca se convertirá en Tracking.
Conserva un ancla en todas las sesiones
Un ancla que no se conserva desaparece después de que se destruye una sesión. Cuando conservas un ancla, tu app recuerda la posición de esa ancla en sus datos privados de la app. 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 el 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 todas las anclas que se conservaron y que aún están presentes en el almacenamiento de tu app:
val uuids = Anchor.getPersistedAnchorUuids(session)