Добавьте подпространство в свое приложение

Подпространство — это раздел 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)
    }
      ...
}