Aggiungere un sottospazio all'app

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 un SpatialPanel, lo spazio sottostante è un elemento secondario del SpatialPanel 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)
    }
}