Creare ancore con ARCore per Jetpack XR

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Visori XR
Occhiali XR con cavo

Un ancoraggio descrive una posizione e un orientamento fissi nel mondo reale. Se attacchi un oggetto a un ancoraggio, gli oggetti appaiono posizionati in modo realistico nel mondo reale.

Accedere a una sessione

Crea ancore tramite ARCore per Jetpack XR Session. Se stai migliorando l'UI spaziale utilizzando Jetpack Compose per XR, accedi a una sessione di Jetpack Compose per XR. Se lavori con entità spazializzate dalla libreria Jetpack SceneCore, accedi a una sessione da Jetpack XR Runtime.

Configurare la sessione

La creazione e il caricamento degli ancoraggi non richiedono la configurazione della sessione. Tuttavia, la persistenza degli ancoraggi non è attivata per impostazione predefinita nelle sessioni XR. Per rendere persistenti e caricare gli ancoraggi dallo spazio di archiviazione locale, configura la sessione e imposta la modalità 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. */)
}

Ancorare i contenuti a una posizione fissa nello spazio

Un ancoraggio viene creato utilizzando un Pose, che può essere interpretato in relazione a un Anchorable esistente o meno. Un Anchorable è un Trackable a cui possono essere collegati ancoraggi.

Crea un ancoraggio relativo a un elemento ancorabile

Quando viene creato un ancoraggio rispetto a un Anchorable, ad esempio un Plane, l'ancoraggio segue l'Anchorable allegato quando si sposta nello spazio.

val anchor = plane.createAnchor(pose)

Crea un ancoraggio senza un elemento ancorabile

Per creare un ancoraggio non collegato a un Anchorable:

val anchor = Anchor.create(session, pose)

Allegare un'entità a un ancoraggio

Per eseguire il rendering di un modello in questa posizione, crea un GltfModel e imposta il relativo elemento principale su un AnchorSpace.

AnchorEntity.create(session, anchor).apply {
    parent = session.scene.activitySpace
    addChild(entity)
}

Informazioni su TrackingState

Ogni Trackable ha una TrackingState che deve essere controllata prima dell'uso. Un Trackable con un TrackableState di Tracking ha il Pose aggiornato attivamente dal sistema. Un Trackable Paused potrebbe diventare Tracking in futuro, mentre uno Stopped non diventerà mai Tracking.

Mantenere un ancoraggio durante le sessioni

Un ancoraggio non persistente scompare dopo la distruzione di una sessione. Se mantieni un ancoraggio, la tua app ne memorizza la posizione nei suoi dati privati dell'app. Questo ancoraggio può essere recuperato in una sessione successiva ed è ancorato nella stessa posizione del mondo.

Per rendere persistente un ancoraggio, utilizza Anchor.persist() come mostrato qui:

val uuid = anchor.persist()

La tua 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 il numero unpersist(). In questo modo l'ancora viene rimossa dallo spazio di archiviazione dell'app e l'UUID specificato non è più recuperabile per le chiamate a Anchor.load().

Anchor.unpersist(session, uuid)

La tua app può anche richiedere un elenco di tutti gli ancoraggi persistenti che sono ancora presenti nello spazio di archiviazione dell'app:

val uuids = Anchor.getPersistedAnchorUuids(session)