Agrega un subespacio a tu app

Un subespacio es una partición del espacio 3D dentro de tu app en la que puedes colocar modelos 3D, compilar diseños 3D y agregar profundidad al contenido que, de otro modo, sería 2D. Un subespacio solo se renderiza cuando la espacialización está habilitada. En Home Space o en dispositivos que no son de XR, se ignora cualquier código dentro de ese subespacio.

Puedes usar @SubspaceComposable, como Volume y SpatialPanel, para colocar modelos 3D. Algunos componentes de XR, como los Orbiter o los 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 deben invocarse en el subespacio de tu app. Para ello, usarás el elemento componible Subspace.

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. Este subespacio tiene límites efectivamente infinitos y, por lo general, es donde colocas el diseño espacial y el SpatialPanel de tu app.

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 en 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 un SpatialPanel, ese subespacio será un elemento secundario del SpatialPanel 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.

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)
    }
      ...
}