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, которое позволяет тестовым фреймворкам находить элемент в тестах.