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 @SubspaceComposable
come Volume
e SpatialPanel
per posizionare i modelli 3D. Alcuni componenti XR, come gli elementi Orbiter
o SpatialDialog
, sono composabili 2D standard che possono essere utilizzati ovunque nella gerarchia dell'interfaccia utente 2D, ma gli elementi SubspaceComposable
devono essere invocati nello spazio sottostante dell'app. Per farlo, utilizzerai il composable Subspace
.
Come per qualsiasi altro composable, puoi chiamare Subspace
direttamente nella gerarchia dell'interfaccia utente 2D. Tuttavia, è importante conoscere le implicazioni dell'utilizzo di Subspace
in un determinato punto della gerarchia.
Informazioni sulle gerarchie di sottospazi
Lo spazio sottospaziale di primo livello è lo spazio sottospaziale più esterno invocato dalla tua app. Questo
spazio sottospaziale ha limiti effettivamente infiniti ed è in genere dove collocherai
il layout spaziale e SpatialPanel
della tua app.
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 sarà 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.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
// This is a top-level subspace
Subspace {
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(show3DObject)
}
...
}