Un sottospazio è una partizione dello spazio 3D all'interno dell'app in cui puoi posizionare modelli 3D, creare layout 3D e aggiungere profondità a contenuti altrimenti 2D. Un sottospazio viene visualizzato solo quando la spazializzazione è attivata. In Home Space o su dispositivi non XR, qualsiasi codice all'interno di questo sottospazio viene ignorato.
Puoi utilizzare composabili in sottospazio come
Volume
e SpatialPanel
per collocare modelli 3D. Alcuni componenti XR, come Orbiter
o SpatialDialog
, sono composabili 2D standard che possono essere utilizzati ovunque nella gerarchia dell'interfaccia utente 2D, ma i SubspaceComposable
devono essere richiamati nello spazio sottostante dell'app. A tale scopo, utilizza il composable ApplicationSubspace
o il composable Subspace
.
Come suggerisce il nome, il composable ApplicationSubspace
deve contenere tutti i contenuti spazializzati della tua app. Il composable
Subspace
è ideale per nidificare una partizione di spazio 3D
più in profondità nella gerarchia dell'interfaccia utente esistente della tua app.
Come per qualsiasi altro composable, puoi chiamare
Subspace
direttamente nella gerarchia dell'interfaccia utente 2D. Tuttavia, è importante conoscere le implicazioni di dove nella gerarchia viene invocato Subspace
.
Informazioni sulle gerarchie di sottospazi
Lo spazio sottospaziale di primo livello è lo spazio sottospaziale più esterno invocato dalla tua app. Utilizza il composable ApplicationSubspace
per il tuo spazio sottospaziale di primo livello, ma se nella tua app utilizzi solo il composable Subspace, il composable Subspace
più esterno sarà il tuo spazio sottospaziale di primo livello. Per impostazione predefinita, questo sottospazio di primo livello è delimitato dallo spazio consigliato per la visualizzazione di un'app e in genere è dove posizioni il layout spaziale e SpatialPanel
dell'app. Se devi modificare i limiti dello spazio sottospaziale di primo livello, passa diversi [VolumeConstraints
][VolumeConstraints] a ApplicationSubspace
.
Tuttavia, se inserisci un altro sottospazio all'interno di una gerarchia dell'interfaccia utente 2D in un riquadro contenuto nel sottospazio di primo livello, il sottospazio nidificato si comporta in modo diverso.
Gli spazi sottoinsiemi nidificati presentano due differenze principali rispetto a quelli di primo livello 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 elementi secondari dell'entità in cui vengono richiamati. Ciò significa che, se chiami un composable
Subspace
nidificato all'interno di unSpatialPanel
, lo spazio sottostante è un elemento secondario delSpatialPanel
in cui viene chiamato.
Questi comportamenti degli spazi sottoinsiemi nidificati consentono funzionalità come:
- Spostare l'elemento secondario con l'entità principale
- Spostamento della posizione del bambino utilizzando l'offset
SubspaceModifier
- Presentare un oggetto 3D che si trova sopra l'interfaccia utente 2D e corrisponde all'altezza e alla larghezza dello spazio appropriato nel layout 2D
Aggiungere un sottospazio all'app
Il seguente esempio di codice mostra come aggiungere sottospazi di primo livello e nidificati alla tua app:
setContent { // This is a top-level subspace ApplicationSubspace { SpatialPanel { MyComposable() } } }
@Composable private fun MyComposable() { Row { PrimaryPane() SecondaryPane() } } @Composable private fun PrimaryPane() { // This is a nested subspace, because PrimaryPane is in a SpatialPanel // and that SpatialPanel is in a top-level Subspace Subspace { ObjectInAVolume(true) } }