Crea anclas con ARCore para Jetpack XR

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)