Модификаторы подпространств

Поддерживаемые XR-устройства
Это руководство поможет вам создавать продукты для таких XR-устройств.
XR-шлемы
Проводные XR-очки

SubspaceModifier похож на модификатор Compose для composable-функций в Subspace. SubspaceModifier позволяет управлять composable-функциями в трехмерном пространстве, помогая размещать и поворачивать узлы 3D-макета, а также добавлять к ним действия.

Макет

По умолчанию Subspace ограничен рекомендуемым пространством для просмотра приложения. Эти границы используются при измерении макета компонентов подпространства, аналогично границам в макетах 2D Compose.

Заполнить границы

Модификаторы fillMaxSize, fillMaxWidth, fillMaxHeight и fillMaxDepth позволяют контенту (частично) заполнять границы родительского элемента. Использование модификаторов заполнения помогает макету приложения размещать контент независимо от характеристик дисплея устройства XR.

Как задать размер и обязательный размер

Модификаторы size, width, height и depth объявляют предпочтительный размер контента. Чтобы указать точный размер контента, используйте requiredSize, requiredWidth, requiredHeight и requiredDepth. Эти единицы измерения должны быть указаны в dp. Чтобы преобразовать метры в dp, используйте Meter.toDp().

Размещение composable-функций

offset

Модификатор offset перемещает composable-функцию в трехмерном пространстве по осям x, y и z. Эти единицы измерения должны быть указаны в dp. Чтобы преобразовать метры в dp, используйте Meter.toDp().

rotate

Модификатор rotate поворачивает заданную composable-функцию в пространстве. Направление и угол поворота можно задать разными способами:

  • С помощью тангажа, рыскания и крена, которые определяют вращение вокруг осей x, y и z соответственно.
  • С помощью axisAngle, который представляет собой Vector3, обозначающий ось вращения и количество градусов, на которое нужно повернуть объект.
  • Используйте Quaternion, представляющий поворот.

rotateToLookAtUser

Модификатор rotateToLookAtUser постоянно поворачивает контент так, чтобы он всегда был обращен к пользователю. Вы также можете использовать этот модификатор, чтобы добиться эффекта "рекламного щита", когда контент поворачивается лицом к пользователю по оси Y, оставаясь при этом в вертикальном положении и выравниваясь по силе тяжести. Для этого объедините модификатор rotateToLookAtUser с модификатором gravityAligned.

Перемещение и изменение размера composable-функций

Позвольте пользователям напрямую управлять положением и размером объектов в трехмерном пространстве.

Перемещение элементов

Если модификатор movable присутствует и включен, показываются перетаскиваемые элементы управления пользовательского интерфейса, которые позволяют пользователю перемещать элемент в трехмерном пространстве. Модификаторы movable можно применять ко всему объекту Subspace, компонентам пространственного макета (например, SpatialRow и SpatialColumn) и отдельным компонентам (например, SpatialPanel и SpatialGltfModel).

Поведение движения определяется предоставленным movePolicy:

  • MovePolicy.Default (или MovePolicy.system()). Система полностью управляет перемещением, а также автоматически рассчитывает и применяет новую позу и масштаб на основе действий пользователя.
  • MovePolicy.custom() – система рассчитывает целевую Pose на основе входных данных, но не применяет ее автоматически к связанному элементу. Это полезно для ограничения движения или создания пользовательского движения в вашем приложении.
  • MovePolicy.anchor() – позволяет пользователю привязывать и закреплять перемещаемый элемент на обнаруженных плоскостях реального мира.

Фиксированные composable-функции

Чтобы закрепить перемещаемую composable-функцию подпространства на поверхности в реальном мире, передайте MovePolicy.anchor() в модификатор movable. Это правило позволяет пользователям прикреплять элементы (например, SpatialPanel и SpatialGltfModel) к физическим поверхностям, таким как столы, стены или полы.

Вы можете отфильтровать обнаруженные плоскости, к которым может привязываться элемент, используя следующие параметры (если оставить их пустыми, элемент может привязываться к любой обнаруженной плоскости):

  • anchorPlaneOrientations – набор значений PlaneOrientation (Horizontal, Vertical или Any).
  • anchorPlaneSemantics – набор значений PlaneSemantic (Wall, Floor, Ceiling, Table или Any).

Как изменять размер элементов

Если модификатор resizable() присутствует и включен, будут показаны элементы управления пользовательского интерфейса, позволяющие пользователю изменять размер элемента в трехмерном пространстве. Поведение при изменении размера определяется значением resizePolicy:

  • ResizePolicy.default(): система автоматически обрабатывает жест изменения размера и применяет новые размеры к контенту.
  • ResizePolicy.custom(). Система предоставляет SpatialResizeEvent и не применяет автоматически результат изменения размера к связанному элементу.

Как изменить внешний вид composable-функций

alpha

Модификатор alpha задает непрозрачность элемента и его дочерних элементов, где 0f – полностью прозрачный, а 1.0f – полностью непрозрачный.

scale

Модификатор scale масштабирует содержимое составного элемента по горизонтальной, вертикальной и глубинной осям.

Тестирование и специальные возможности

semantics

Модификатор semantics добавляет семантику к узлу макета для использования в тестировании и специальных возможностях. Ознакомьтесь со статьями Семантика в Jetpack Compose и SemanticsModifier.

testTag

Модификатор testTag – это сокращение для SemanticsPropertyReceiver.testTag, которое позволяет тестовым фреймворкам находить элемент в тестах.