Adicionar um subespaço ao app

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 @SubspaceComposables, 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 com 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 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 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 um SpatialPanel, esse subespaço será filho do SpatialPanel 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
    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(true)
    }
}