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