Um subespaço é uma partição do espaço 3D no app em que é possível colocar modelos 3D, criar layouts 3D e adicionar profundidade a conteúdo 2D. Um subspace é renderizado somente quando a espacialização está ativada. No espaço doméstico ou em dispositivos que não são XR, qualquer código dentro desse subspace é ignorado.
É possível usar @SubspaceComposable
s, 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 interface 2D, mas SubspaceComposable
precisam ser
invocados no subespaço do app. Para isso, use o combinável
Subspace
.
Como qualquer outro elemento combinável, é possível chamar Subspace
diretamente na hierarquia da interface 2D. No entanto, é importante saber as
implicações de onde na hierarquia você invoca Subspace
.
Sobre as hierarquias de subespaço
O subespaço de nível superior é o mais externo invocado pelo app. Esse
subespaço tem limites efetivamente infinitos e é normalmente onde você vai colocar
o layout espacial e o SpatialPanel
do app.
No entanto, se você aninhar outro subespaço dentro de uma hierarquia de interface 2D em um painel contido no subespaço de nível superior, esse subespaço 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
aninhado 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.
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)
}
...
}