Un sottospazio è una partizione dello spazio 3D all'interno dell'app in cui puoi inserire modelli 3D, creare layout 3D e aggiungere profondità ai contenuti 2D. Un sottospazio viene sottoposto a rendering solo quando la spazializzazione è abilitata. In Spazio Home o sui dispositivi non XR, qualsiasi codice all'interno di quel sottospazio viene ignorato.
Puoi utilizzare i componibili dei sottospazi come SpatialPanel, SpatialRow,
e SpatialColumn per creare il layout e inserire contenuti 2D nello spazio 3D. Per inserire contenuti 3D, utilizza il componibile del sottospazio appropriato, ad esempio
SceneCoreEntity per i modelli 3D e SpatialExternalSurface per
le immagini stereo. Alcuni componenti XR come Orbiter o SpatialDialog
sono componibili 2D standard che possono essere utilizzati ovunque nella gerarchia dell'interfaccia utente 2D,
ma un SubspaceComposable deve essere richiamato nel sottospazio dell'app. Per farlo, utilizza il Subspace componibile del sottospazio.
Informazioni sulle gerarchie dei sottospazi
Subspace di primo livello è il sottospazio più esterno richiamato dall'app.
Ogni chiamata a un Subspace crea una nuova gerarchia dell'interfaccia utente spaziale indipendente.
Non eredita la posizione spaziale, l'orientamento o la scala di qualsiasi Subspace padre in cui è nidificato.
Per creare un Subspace incorporato o nidificato all'interno di un SpatialPanel, Orbiter,
SpatialPopup, o un altro componente, utilizza PlanarEmbeddedSubspace.
PlanarEmbeddedSubspace presenta due differenze principali rispetto a Subspace:
- Partecipano al layout 2D in cui vengono richiamati. Ciò significa che l'altezza e la larghezza del sottospazio saranno vincolate dall'altezza e dalla larghezza del layout principale 2D.
- Si comportano come figli dell'entità in cui vengono richiamati. Ciò significa che,
se chiami un componibile del sottospazio nidificato all'interno di un
SpatialPanel, quel sottospazio è un figlio delSpatialPanelin cui viene chiamato.
Questi comportamenti di PlanarEmbeddedSubspace consentono funzionalità come:
- Spostare il figlio con l'entità padre
- Compensare la posizione del figlio utilizzando l'offset
SubspaceModifier - Presentare un oggetto 3D che si sposta sopra l'interfaccia utente 2D e corrisponde all'altezza e alla larghezza dello spazio appropriato nel layout 2D
Adattare i layout a un sottospazio
Su Android XR, il layout dell'app è associato per impostazione predefinita a VolumeConstraints di
Subspace in modalità spazio intero. Per questo motivo, devi considerare la quantità di spazio visibile a disposizione dell'utente e regolare il layout di conseguenza. recommendedContentBoxInFullSpace fornisce le
dimensioni specifiche per il riquadro di delimitazione all'interno di ActivitySpace in modo
che i contenuti possano essere inseriti nel campo visivo dell'utente.
I contenuti principali dell'app devono rientrare in questo riquadro. Se hai contenuti che devono superare i limiti consigliati, valuta la possibilità di utilizzare un layout che incoraggi gli utenti a esplorare lo spazio muovendo la testa. Il vincolo predefinito di
recommendedContentBoxInFullSpace può essere sostituito applicando un
modificatore personalizzato basato sulle dimensioni, ad esempio SubspaceModifier.requiredSizeIn. Per un comportamento senza limiti, imposta allowUnboundedSubspace = true.
Chiama recommendedContentBoxInFullSpace utilizzando la sessione corrente per
ottenere queste dimensioni specifiche, se necessario. Vedi l'esempio che segue:
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
Aggiungere un sottospazio all'app
L'esempio di codice seguente mostra come aggiungere Subspace e
PlanarEmbeddedSubspace all'app:
setContent { // This is a top-level subspace Subspace { SpatialPanel { MyComposable() } } }
@Composable private fun MyComposable() { Row { PrimaryPane() SecondaryPane() } } @Composable private fun PrimaryPane() { // This is an embedded subspace, because PrimaryPane is in a SpatialPanel // and that SpatialPanel is in the top-level Subspace PlanarEmbeddedSubspace { SpatialPanel {} } }
Per ulteriori dettagli, consulta la documentazione di riferimento completa su Subspace e
PlanarEmbeddedSubspace.