Un ancoraggio descrive una posizione e un orientamento nel mondo reale. Il collegamento di un oggetto a un ancoraggio consente agli oggetti di apparire in modo realistico nel mondo reale e aiuta l'app a risparmiare energia perché non deve eseguire la logica ogni frame.
Accedere a una sessione
Crea ancoraggi tramite una ARCore per Jetpack XR Session. Se stai
migliorando la UI spaziale utilizzando Jetpack Compose per XR, accedi a una sessione da
Jetpack Compose per XR. Se stai lavorando 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 dall'archiviazione locale, configura la sessione e imposta la
AnchorPersistenceMode.LOCAL modalità:
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 nello spazio
Un ancoraggio viene creato utilizzando una Pose, che può essere interpretata in relazione a
un Anchorable esistente o fissa nel mondo. Un Anchorable è un
Trackable a cui è possibile collegare gli ancoraggi.
Creare un ancoraggio relativo a un Anchorable
Quando un ancoraggio viene creato in relazione a un Anchorable, ad esempio un Plane, l'ancoraggio segue l'Anchorable collegato quando si sposta nello spazio.
val anchor = plane.createAnchor(pose)
Creare un ancoraggio fisso nel mondo
Per creare un ancoraggio fisso nel mondo, non collegarlo a un Anchorable. Utilizza questo tipo di ancoraggio solo per i punti che fluttuano nello spazio, perché la stima della sessione della posizione degli oggetti immobili cambia nel tempo:
val anchor = Anchor.create(session, pose)
Collegare 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.
AnchorSpace.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Informazioni su TrackingState
Ogni Trackable ha un TrackingState che deve essere controllato prima di essere utilizzato.
Un Trackable con un TrackableState di Tracking ha la relativa Pose aggiornata attivamente dal sistema. Un Trackable in stato Paused potrebbe diventare Tracking in futuro, mentre uno in stato Stopped non diventerà mai Tracking.
Rendere persistente un ancoraggio tra le sessioni
Un ancoraggio non persistente scompare dopo la distruzione di una sessione. Se rendi persistente un ancoraggio, la tua app ricorda la posizione dell'ancoraggio nei dati privati dell'app. Questo ancoraggio può essere recuperato in una sessione successiva ed è ancorato nella stessa posizione nel mondo.
Per rendere persistente un ancoraggio, utilizza Anchor.persist() come mostrato di seguito:
val uuid = anchor.persist()
La tua app può recuperare l'ancoraggio utilizzando il 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 ancoraggio, chiama unpersist(). In questo modo l'ancoraggio viene rimosso dall'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 ancora presenti nell'archiviazione dell'app:
val uuids = Anchor.getPersistedAnchorUuids(session)