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 @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 un SpatialPanel, lo spazio sottostante sarà 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.

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)
    }
      ...
}