Подпространство – это часть трехмерного пространства в приложении, где можно размещать 3D-модели, создавать 3D-макеты и добавлять глубину двухмерному контенту. Подпространство отображается, только когда включена пространственная обработка. В Home Space или на устройствах, не поддерживающих XR, любой код в этом подпространстве игнорируется.
Подробнее о пространственных макетах и компонентах, которые можно использовать в подпространстве…
Об иерархии подпространств
Subspace верхнего уровня – это внешнее подпространство, вызываемое приложением. Каждый вызов метода Subspace создает новую независимую иерархию пространственного интерфейса. Он не наследует пространственное положение, ориентацию или масштаб родительского элемента Subspace, в который он вложен.
Чтобы создать встроенный или вложенный элемент Subspace в SpatialPanel, Orbiter, SpatialPopup или другом компоненте, используйте PlanarEmbeddedSubspace.
PlanarEmbeddedSubspace имеет два основных отличия от Subspace:
- Они участвуют в двухмерном макете, в котором вызываются. Это означает, что высота и ширина подпространства будут ограничены высотой и шириной его родительского макета 2D.
- Они ведут себя как дочерние элементы объекта, в котором вызываются. Это означает, что если вы вызываете composable-функцию подпространства, вложенную в
SpatialPanel, то это подпространство является дочерним элементомSpatialPanel, в котором оно вызывается.
Такое поведение PlanarEmbeddedSubspace позволяет:
- Перемещение дочернего объекта вместе с родительским объектом
- Смещение дочернего элемента с помощью свойства offset
SubspaceModifier - Показ 3D-объекта, который парит над 2D-интерфейсом и соответствует высоте и ширине подходящего пространства в 2D-макете.
Как адаптировать макеты для подпространства
В Android XR макет приложения по умолчанию привязан к VolumeConstraints Subspace в режиме полного пространства. Поэтому вам следует учитывать объем видимого пространства, доступного пользователю, и соответствующим образом корректировать макет. recommendedContentBoxInFullSpace предоставляет конкретные размеры для граничной рамки внутри ActivitySpace, чтобы контент можно было разместить в зоне обзора пользователя.
Основной контент приложения должен помещаться в эту область. Если контент выходит за рекомендуемые границы, используйте макет, который побуждает пользователей исследовать пространство, поворачивая голову. Ограничение по умолчанию для recommendedContentBoxInFullSpace можно переопределить, применив модификатор на основе размера, например SubspaceModifier.requiredSizeIn. Чтобы задать неограниченное поведение, используйте allowUnboundedSubspace = true.
Вызовите recommendedContentBoxInFullSpace, используя текущий сеанс, чтобы получить нужные параметры. Вот пример:
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
Как добавить подпространство в приложение
В примере кода ниже показано, как добавить в приложение Subspace и PlanarEmbeddedSubspace.
setContent { // This is a top-level subspace Subspace { SpatialPanel { MyComposable() } } }
@Composable private fun MyComposable() { Row { PrimaryPane() SecondaryPane() } } @Composable private fun PrimaryPane() { // This is an embedded subspace, because PrimaryPane is in a SpatialPanel // and that SpatialPanel is in the top-level Subspace PlanarEmbeddedSubspace { SpatialPanel {} } }
Подробную информацию вы найдете в справочной документации по Subspace и PlanarEmbeddedSubspace.