Подпространство — это раздел 3D-пространства внутри вашего приложения, где вы можете размещать 3D-модели, создавать 3D-макеты и добавлять глубину к 2D-контенту. Подпространство визуализируется только тогда, когда включена пространственная обработка. В домашнем пространстве или на устройствах, отличных от XR, любой код в этом подпространстве игнорируется.
Вы можете использовать @SubspaceComposable
, такие как Volume
и SpatialPanel
для размещения 3D-моделей. Некоторые компоненты XR, такие как Orbiter
или SpatialDialog
, являются стандартными 2D-компонентами, которые можно использовать в любом месте иерархии 2D-UI, но SubspaceComposable
необходимо вызывать в подпространстве вашего приложения. Для этого вы будете использовать компоновку Subspace
.
Как и в случае с любым другим компонентом, вы можете вызывать Subspace
непосредственно в иерархии 2D-интерфейса. Однако важно осознавать последствия того, в каком месте иерархии вы вызываете Subspace
.
Об иерархиях подпространств
Подпространство верхнего уровня — это самое внешнее подпространство, вызываемое вашим приложением. Это подпространство фактически имеет бесконечные границы, и обычно именно там вы размещаете пространственный макет вашего приложения и SpatialPanel
.
Однако если вы вкладываете другое подпространство внутри иерархии 2D-UI в панель, содержащуюся в подпространстве верхнего уровня, это вложенное подпространство ведет себя по-другому.
Вложенные подпространства имеют два ключевых отличия от Subspace
верхнего уровня:
- Они участвуют в 2D-макете, в котором они вызываются. Это означает, что высота и ширина подпространства будут ограничены высотой и шириной его родительского 2D-макета.
- Они ведут себя как дочерние элементы сущности, в которой они вызваны. Это означает, что если вы вызываете составной объект
Subspace
, вложенный внутриSpatialPanel
, это подпространство будет дочерним элементомSpatialPanel
в котором оно вызвано.
Такое поведение вложенного подпространства обеспечивает такие возможности, как:
- Перемещение дочернего объекта вместе с родительским объектом
- Смещение местоположения дочернего элемента с помощью смещения
SubspaceModifier
- Представление 3D-объекта, который парит над вашим 2D-интерфейсом и соответствует высоте и ширине соответствующего пространства в 2D-макете.
Добавьте подпространство в свое приложение
В следующем примере кода показано, как добавить в приложение подпространства верхнего уровня и вложенные подпространства.
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)
}
...
}