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)