Ajouter un sous-espace à votre application

Un sous-espace est une partition de l'espace 3D de votre application dans laquelle vous pouvez placer des modèles 3D, créer des mises en page 3D et ajouter de la profondeur à un contenu 2D. Un sous-espace n'est affiché que lorsque la spatialisation est activée. Dans l'espace Home ou sur les appareils non XR, tout code de ce sous-espace est ignoré.

Vous pouvez utiliser des @SubspaceComposable tels que Volume et SpatialPanel pour placer des modèles 3D. Certains composants XR tels que les Orbiter ou les SpatialDialog sont des composables 2D standards qui peuvent être utilisés n'importe où dans la hiérarchie de l'UI 2D, mais les SubspaceComposable doivent être appelés dans le sous-espace de votre application. Pour ce faire, vous allez utiliser le composable Subspace.

Comme pour tout autre composable, vous pouvez appeler Subspace directement dans votre hiérarchie d'UI 2D. Toutefois, il est important de connaître les implications de l'emplacement dans la hiérarchie où vous appelez Subspace.

À propos des hiérarchies d'espaces sous-jacents

Le sous-espace de premier niveau est le sous-espace le plus externe appelé par votre application. Ce sous-espace a des limites pratiquement infinies, et c'est généralement là que vous placerez la mise en page spatiale et SpatialPanel de votre application.

Toutefois, si vous imbriquez un autre sous-espace dans une hiérarchie d'UI 2D dans un panneau contenu dans le sous-espace de niveau supérieur, ce sous-espace imbriqué se comporte différemment.

Les sous-espaces imbriqués présentent deux différences majeures par rapport aux Subspace de niveau supérieur:

  • Ils participent à la mise en page 2D dans laquelle ils sont appelés. Cela signifie que la hauteur et la largeur du sous-espace seront limitées par la hauteur et la largeur de sa mise en page parente 2D.
  • Ils se comportent comme des enfants de l'entité dans laquelle ils sont appelés. Cela signifie que si vous appelez un composable Subspace imbriqué dans un SpatialPanel, cet sous-espace sera un enfant de l'SpatialPanel dans lequel il est appelé.

Ces comportements des sous-espaces imbriqués permettent les fonctionnalités suivantes:

  • Déplacer l'enfant avec l'entité parente
  • Déplacer l'emplacement de l'enfant à l'aide du décalage SubspaceModifier
  • Présenter un objet 3D qui flotte au-dessus de votre UI 2D et qui correspond à la hauteur et à la largeur de l'espace approprié dans la mise en page 2D

Ajouter un sous-espace à votre application

L'exemple de code suivant montre comment ajouter des sous-espaces de niveau supérieur et imbriqués à votre application.

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