Un subespacio es una partición de espacio 3D dentro de tu app, en la que puedes colocar modelos 3D, compilar diseños 3D y agregar profundidad a contenido que, de otra forma, es 2D. Un subespacio solo se renderiza cuando se habilita la espacialización. En Home Space o en dispositivos que no son de XR, se ignora cualquier código dentro de ese subespacio.
Puedes usar elementos componibles de subespacios, como Volume
y SpatialPanel
, para colocar modelos 3D. Algunos componentes de XR, como Orbiter
o SpatialDialog
, son elementos componibles 2D estándar que se pueden usar en cualquier lugar de la jerarquía de la IU 2D, pero los SubspaceComposable
se deben invocar en el subespacio de tu app. Para ello, usa el elemento componible ApplicationSubspace
o el elemento componible Subspace
.
Como su nombre lo indica, el elemento componible ApplicationSubspace
debe contener todo el contenido espacializado de tu app. El elemento componible Subspace
es ideal para anidar una partición de espacio 3D más abajo en la jerarquía de IU existente de tu app.
Al igual que con cualquier otro elemento componible, puedes llamar a Subspace
directamente en tu jerarquía de IU 2D. Sin embargo, es importante tener en cuenta las implicaciones de dónde invocas Subspace
en la jerarquía.
Acerca de las jerarquías de subespacios
El subespacio de nivel superior es el subespacio más externo que invoca tu app. Usa el elemento componible ApplicationSubspace
para tu subespacio de nivel superior, pero, si solo usas el elemento componible de Subspace en tu app, el elemento componible Subspace
más externo será tu subespacio de nivel superior. De forma predeterminada, este subespacio de nivel superior está limitado por el espacio recomendado para ver una app y, por lo general, es donde colocas el diseño espacial y SpatialPanel
de tu app. Si necesitas cambiar los límites del subespacio de nivel superior, pasa diferentes [VolumeConstraints
][VolumeConstraints] a tu ApplicationSubspace
.
Sin embargo, si anidas otro subespacio dentro de una jerarquía de IU 2D en un panel que se encuentra en el subespacio de nivel superior, ese subespacio anidado se comporta de manera diferente.
Los subespacios anidados tienen dos diferencias clave con los Subspace
de nivel superior:
- Participan en el diseño 2D en el que se invocan. Esto significa que la altura y el ancho del subespacio estarán limitados por la altura y el ancho de su diseño superior 2D.
- Se comportan como elementos secundarios de la entidad en la que se invocan. Esto significa que, si llamas a un elemento componible
Subspace
anidado dentro de unSpatialPanel
, ese subespacio es un elemento secundario delSpatialPanel
al que se llama.
Estos comportamientos de subespacio anidado habilitan funciones como las siguientes:
- Cómo mover el elemento secundario con la entidad superior
- Compensación de la ubicación del elemento secundario con el desplazamiento
SubspaceModifier
- Presentar un objeto 3D que se coloca sobre la IU 2D y coincide con la altura y el ancho del espacio adecuado en el diseño 2D
Agrega un subespacio a tu app
En el siguiente ejemplo de código, se muestra cómo agregar subespacios anidados y de nivel superior a tu 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) } }