Mentre un Subspace standard rimane in una posizione fissa determinata dal sistema, a volte potresti voler spostare dinamicamente la UI spaziale della tua app con l'utente o mantenerla collegata a una posizione specifica nell'ambiente o nel mondo reale. Puoi passare un FollowTarget al parametro follow di Subspace per creare esperienze come HUD con blocco della testa o pannelli informativi collegati a oggetti del mondo reale.
Aggiungi un sottospazio che segue la visuale dell'utente
Per aggiungere un sottospazio posizionato in relazione al campo visivo dell'utente, utilizza FollowTarget.view. A seconda della modalità di monitoraggio specificata, questo ti consente di monitorare continuamente i movimenti della testa dell'utente o di posizionare i contenuti in modo statico in base a dove sta guardando. Puoi utilizzarlo per elementi come HUD, notifiche persistenti o controlli di azioni rapide.
Dichiara e richiedi le autorizzazioni
Prima di richiedere le autorizzazioni, devi dichiararle nel file manifest dell'app
utilizzando l'elemento <uses-permission>.
<manifest ...>
<!-- Only declare permissions that your app actually needs. In this example,
we declare permissions for head tracking. -->
<uses-permission android:name="android.permission.HEAD_TRACKING"/>
<application ...>
...
</application>
</manifest>
Ora richiedi le autorizzazioni. Per ulteriori informazioni, consulta i principi e i flussi di lavoro relativi alle autorizzazioni per assicurarti di offrire la migliore esperienza ai tuoi utenti, ad esempio verificando se l'utente ha già concesso le autorizzazioni di runtime richieste dalla tua app e se la tua app deve mostrare una motivazione all'utente prima di richiedere questa autorizzazione.
Configura la sessione
Successivamente, configurerai la sessione della tua app creata per te quando utilizzi Jetpack Compose per XR impostando DeviceTrackingMode.SPATIAL:
val session = checkNotNull(LocalSession.current)
session.configure(
config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
.build()
)
Crea lo spazio secondario
Infine, creerai un sottospazio che ha come target la visualizzazione dell'utente, insieme a una modalità di monitoraggio:
// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
follow = FollowTarget.view(
// Customizing the soft follow to move slightly faster and tracking all dimensions
mode = FollowMode.soft(
)
),
modifier = modifier,
) {
SpatialPanel {
// SpatialPanel Content
}
}
Modalità Segui per i sottospazi che hanno come target la visualizzazione di un utente
Quando utilizzi FollowTarget.view come target, puoi personalizzare il comportamento dei contenuti specificando un FollowMode:
FollowMode.soft: i contenuti seguono gradualmente i movimenti del target, creando un effetto fluttuante fluido.FollowMode.snap: i contenuti vengono posizionati davanti all'utente una volta in base alla sua posizione di visualizzazione iniziale e rimangono fermi in seguito.FollowMode.tight: i contenuti seguono immediatamente la visuale dell'utente con un ritardo minimo, rimanendo strettamente legati ai suoi movimenti.
Tutte le modalità di tracciamento ti consentono di scegliere quali dimensioni del movimento vengono monitorate tra le seguenti opzioni:
- Asse X
- Asse Y
- Tono
- Tira
- Imbardata
RotationOnly: consente di specificare un singolo valore per monitorare le dimensioni relative alla rotazione (beccheggio, imbardata e rollio).
Puoi scegliere qualsiasi combinazione di queste dimensioni o utilizzare il valore predefinito TrackedDimensions.All che le monitora tutte.
Aggiungi un sottospazio che segue una caratteristica ambientale
Per aggiungere un sottospazio che blocca i contenuti spaziali rigorosamente a una caratteristica fisica nell'ambiente dell'utente, utilizza FollowTarget.anchor(). Utilizza questo tipo di target per seguire un piano rilevato, un'ancora o una posizione geospaziale.
Il monitoraggio delle caratteristiche del mondo reale richiede autorizzazioni e configurazioni della sessione aggiuntive a seconda della caratteristica che stai seguendo.
Per istruzioni dettagliate su come utilizzare le funzionalità di percezione per le funzionalità ARCore, nonché su come configurare le autorizzazioni necessarie e la sessione per utilizzare FollowTarget.anchor(), consulta la documentazione dell'SDK Jetpack XR per Piani, Ancoraggi e Pose geospaziali.
L'esempio seguente crea un sottospazio che segue un'ancora reale:
// A subspace locked to a real-world anchor
Subspace(
follow = FollowTarget.anchor(anchor = myAnchor)
) {
// Rotate the panel to ensure it faces the user while remaining anchored
SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
// SpatialPanel Content
}
}
Evita la sovrapposizione spaziale
Ogni Subspace che crei gestisce la propria scena 3D indipendente e non è a conoscenza di altri sottospazi esistenti, pertanto non evita automaticamente le collisioni.
Per evitare che l'HUD bloccato sulla testa si sovrapponga ai pannelli dei PDI ancorati (Z-fighting), gestisci in modo esplicito i volumi del layout utilizzando questi metodi:
- Utilizza gli offset: utilizza
SubspaceModifier.offsetper avvicinare o allontanare la UI periferica (come l'HUD) sull'asse Z o spostarla ai bordi della visione dell'utente. - Limita le dimensioni: applica modificatori come
requiredSizeInper limitare i riquadri di delimitazione degli spazi.
Per ulteriori informazioni sugli spazi delle coordinate, sui vincoli di layout e su tutte le configurazioni di monitoraggio disponibili, consulta la documentazione di riferimento di Subspace.