Um subspace é uma partição do espaço 3D no seu app em que você pode colocar modelos 3D, criar layouts 3D e adicionar profundidade ao conteúdo 2D. Um subspace é renderizado somente quando a espacialização está ativada. No espaço da casa ou em dispositivos que não são XR, qualquer código dentro desse subspace é ignorado.
É possível usar elementos combináveis de subespaço, como
Volume
e SpatialPanel
, para
colocar modelos 3D. Alguns componentes de XR, como Orbiter
ou SpatialDialog
, são elementos combináveis 2D padrão que podem
ser usados em qualquer lugar na hierarquia da IU 2D, mas
SubspaceComposable
s precisam ser invocados no subespaço
do app. Para fazer isso, use o elemento combinável ApplicationSubspace
ou o Subspace
.
Como o nome sugere, o elemento combinável ApplicationSubspace
precisa conter todo o conteúdo espacializado do app. O elemento combinável
Subspace
é ideal para aninhar uma partição de espaço 3D
mais profundamente na hierarquia de interface existente do app.
Como com qualquer outro elemento combinável, é possível chamar
Subspace
diretamente na hierarquia da interface 2D. No entanto, é
importante conhecer as implicações de onde você invoca o
Subspace
na hierarquia.
Sobre hierarquias de subespaço
O subespaço de nível superior é o mais externo invocado pelo app. Use o elemento
combinável ApplicationSubspace
para
o subespaço de nível superior, mas, se você usar apenas o elemento combinável do subespaço no
app, o elemento combinável Subspace
mais externo será o subespaço de nível superior. Por
padrão, esse subspace de nível superior é limitado pelo espaço recomendado para visualizar
um app, e é normalmente onde você coloca o layout espacial do app e
SpatialPanel
. Se você precisar mudar os limites do
subespaço de nível superior, transmita diferentes
[VolumeConstraints
][VolumeConstraints] para o
ApplicationSubspace
.
No entanto, se você aninhar outro subspace dentro de uma hierarquia de interface 2D em um painel contido no subspace de nível superior, esse subspace aninhado se comportará de maneira diferente.
Os subespaços aninhados têm duas diferenças importantes em relação ao Subspace
de nível superior:
- Eles participam do layout 2D em que são invocados. Isso significa que a altura e a largura do subespaço serão limitadas pela altura e largura do layout pai 2D.
- Eles se comportam como filhos da entidade em que são invocados. Isso significa que,
se você chamar um elemento combinável
Subspace
anidado em umSpatialPanel
, esse subespaço será filho doSpatialPanel
em que ele é chamado.
Esses comportamentos de subespaço aninhado permitem recursos como:
- Mover a entidade filha com a entidade mãe
- Como compensar o local da criança usando o deslocamento
SubspaceModifier
- Apresentar um objeto 3D que paira acima da interface 2D e corresponde à altura e largura do espaço apropriado no layout 2D
Adicionar um subespaço ao app
O exemplo de código abaixo mostra como adicionar subespaços aninhados e de nível superior ao 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) } }