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 è abilitata. In Home Space o su dispositivi non XR, qualsiasi codice all'interno di questo spazio secondario viene ignorato.
Puoi utilizzare i composable di sottospazio come SpatialPanel, SpatialRow e
SpatialColumn per creare il layout e posizionare i contenuti 2D nello spazio
3D. Per posizionare contenuti 3D, utilizza il componente Subspace Composable appropriato, ad esempio
SceneCoreEntity per i modelli 3D e SpatialExternalSurface per le
immagini stereoscopiche. Alcuni componenti XR, come Orbiter o SpatialDialog,
sono composable 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 componibile Subspace dello spazio secondario.
Informazioni sulle gerarchie di spazi secondari
Il Subspace di primo livello è il sottospazio più esterno richiamato dalla tua 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 alcun elemento principale
Subspace in cui è nidificato.
Per creare un Subspace incorporato o nidificato all'interno di un SpatialPanel, Orbiter,
SpatialPopup o di 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 elementi secondari dell'entità in cui vengono richiamati. Ciò significa che,
se chiami un composable subspace nidificato all'interno di un
SpatialPanel, questo subspace è un elemento secondario delSpatialPanelin cui viene chiamato.
Questi comportamenti di PlanarEmbeddedSubspace consentono funzionalità come:
- Spostare il bambino con l'entità genitore
- Compensazione della posizione del bambino utilizzando l'offset
SubspaceModifier - Presentazione di un oggetto 3D che si trova sopra l'interfaccia utente 2D e corrisponde all'altezza e alla larghezza dello spazio appropriato nel layout 2D
Adattare i layout per un sottospazio
Su Android XR, il layout dell'app è associato al VolumeConstraints di Subspace
in modalità Schermo intero per impostazione predefinita. Per questo motivo, devi considerare la quantità di spazio visibile
a disposizione dell'utente e modificare il layout di conseguenza. recommendedContentBoxInFullSpace fornisce le dimensioni specifiche per
il riquadro di selezione all'interno di ActivitySpace in modo che i contenuti possano essere posizionati
nel campo visivo dell'utente.
I contenuti principali della tua app devono rientrare in questa casella. Se hai contenuti che
devono superare i limiti consigliati, valuta 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 illimitato, imposta allowUnboundedSubspace = true.
Chiama recommendedContentBoxInFullSpace utilizzando la sessione corrente per
ottenere queste dimensioni specifiche in base alle esigenze. Vedi il seguente esempio:
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
Aggiungere un sottospazio all'app
Il seguente esempio di codice mostra come aggiungere Subspace e
PlanarEmbeddedSubspace alla tua 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.