Creare ancore con ARCore per Jetpack XR

Un'ancora descrive una posizione e un orientamento fissi nel mondo reale. L'aggancio di un oggetto a un'ancora consente di visualizzarlo in modo realistico nel mondo reale.

Creare una sessione ARCore per Jetpack XR

Crea ancore tramite una sessione ARCore per Jetpack XR. Consulta la sezione Comprendere il ciclo di vita di una sessione per ottenere un Session.

Configura la sessione

La creazione e il caricamento degli ancoraggi non richiedono la configurazione della sessione. Tuttavia, la persistenza dell'ancora non è attiva per impostazione predefinita nelle sessioni XR. Per mantenere e caricare gli ancoraggi, configura la sessione:

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! */)
}

Ancorare i contenuti a una posizione fissa nello spazio

Un'ancora viene creata utilizzando un Pose, che può essere interpretato in base a un Trackable esistente o meno.

Creare un'ancora rispetto a un elemento tracciabile

Quando viene creata un'ancora rispetto a un Trackable, ad esempio un Plane, che consente all'ancora di seguire il Trackable collegato quando si sposta nello spazio.

when (val result = trackable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Creare un'ancora senza un elemento tracciabile

Per creare un'ancora non collegata a un Trackable:

when (val result = Anchor.create(session, pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Collega un'entità a un'ancora

Per eseguire il rendering di un modello in questa posizione, [crea un GltfModel][5] e impostane il parent su un AnchorEntity.

AnchorEntity.create(session, anchor).apply {
    setParent(session.activitySpace)
    addChild(entity)
}

Informazioni su TrackingState

Ogni Trackable ha un TrackingState che deve essere controllato prima di essere utilizzato. Un Trackable con un TrackableState pari a Tracking ha il proprio Pose aggiornato attivamente dal sistema. Un Trackable che è Paused potrebbe diventare Tracking in futuro, mentre un Stopped non diventerà mai Tracking.

Mantenere un'ancora in tutte le sessioni

Un'ancora non persistente scompare dopo l'eliminazione di una sessione. Se mantieni un'ancora, la tua app ne memorizza la posizione nei suoi dati privati. Questo riferimento può essere recuperato in una sessione successiva ed è ancorato nella stessa posizione geografica.

Per mantenere un'ancora, utilizza anchor.persist() come mostrato qui:

val uuid = anchor.persist()

L'app può recuperare l'ancora utilizzando UUID in una sessione futura:

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

Quando non hai più bisogno di un'ancora, chiama unpersist(). In questo modo, l'ancora viene rimossa dall'archiviazione della tua app e l'UUID specificato non può essere recuperato per le chiamate a Anchor.load().

Anchor.unpersist(session, uuid)

L'app può anche richiedere un elenco di tutte le ancore persistenti che sono ancora presenti nello spazio di archiviazione dell'app:

val uuids = Anchor.getPersistedAnchorUuids(session)