BoundsControl — MRTK3

Элемент управления

BoundsControl предоставляет ограничивающий прямоугольник с автоматическим размером, а также возможности манипуляции для поворота и масштабирования.

В MRTK 2.x BoundsControl в основном был создан в среде выполнения с помощью конфигурации ScriptableObjects. В MRTK3 настройка и настройка BoundsControl была значительно упрощена. Визуальные элементы и дескрипторы границ — это просто настраиваемая заготовка, которую BoundsControl создает во время выполнения. Разработчики могут настраивать и настраивать готовые визуальные элементы или даже создавать новые визуальные элементы границ с нуля. Мы предоставляем стандартные реализации визуальных элементов границ в соответствии с новым языком Смешанная реальность Design Language.

Новые визуальные элементы предлагают оптимизированную визуальную обратную связь, которая иллюстрирует намерение пользователя и манипуляции с объектом с минимальным навязчивым визуальным шумом.

Настройка

Просто добавьте BoundsControl в существующий объект и заполните ссылку BoundsVisualsPrefab визуальными элементами границ, которые вы хотите использовать. Мы предоставляем несколько различных готовых визуальных элементов границ для использования.

Важно!

Мы настоятельно рекомендуем разработчикам добавить MinMaxScaleConstraint , чтобы предотвратить масштабирование объекта до непригодного размера.

Чтобы использовать эффекты намерения и фокусировки визуальных элементов границ, необходимо иметь StatefulInteractable для объекта . Если взаимодействуемый объект не обнаруживается автоматически, можно указать подключение в инспекторе BoundsControl.

Примечание

Мы рекомендуем разработчикам использовать ObjectManipulator вместе с BoundsControl , чтобы предлагать пользователям прямое манипулирование в дополнение к манипуляциям на основе возможностей. ObjectManipulator может служить объектом StatefulInteractable для состояний наведений/фокусировок, на которые реагируют визуальные элементы границ.

Заготовки визуальных элементов границ

Мы предлагаем несколько готовых визуальных элементов границ для использования с BoundsControl. Разработчикам рекомендуется создавать готовые варианты этих визуальных элементов и настраивать их в соответствии с их потребностями. Анимации и состояния дескриптора работают на платформе StateVisualizer, что позволяет разработчикам дополнительно настраивать внешний вид и возможности.

Стиль обработки окклюзии

Эти ограничивающие визуальные элементы обеспечивают упрощенный визуальный дизайн с меньшим количеством отвлекающих факторов для пользователя. Будут видны только соответствующие маркеры по краям границ. Ограничивающие визуальные элементы сжимаются, расширяются и изменяют цвет и толщину в зависимости от намерения пользователя и хода выполнения выбора. Настоятельно рекомендуется использовать этот визуальный стиль границ.

Заключаемые дескрипторы

Только намерение

В некоторых контекстах дескрипторы могут быть нежелательными, и разработчики могут захотеть использовать только визуальные элементы границ в качестве восхитительного индикатора намерений пользователя. Хотя эта заготовка выполняет эту работу, такой же эффект можно достичь с любым другим визуальным элементом границы, выбрав HandleType.None. Мы обнаружили, что визуальные элементы с сжимаемыми границами являются удовлетворительным и восхитительным элементом визуальной обратной связи для многих различных контекстов, а не только для манипуляций на основе дескрипторов.

Без дескрипторов

Устаревший стиль

Эти визуальные элементы границ отображают все дескрипторы и края поля. Это в большей степени соответствует устаревшей версии языка разработки и предыдущему поведению в MRTK 2.x; однако такая конструкция может быть более отвлекает пользователей из-за ненужного визуального шума. Кроме того, наличие дескрипторов, которые находятся перед объектом (и сзади), может вызвать проблемы с непрямой манипуляцией при ущемлением взгляда. Мы не рекомендуем использовать этот стиль для новых приложений, особенно тех, которые используют преимущества нацеливания взгляда.

Традиционные дескрипторы

Проектирование взаимодействия

В текущей итерации мы предлагаем простое взаимодействие активации и деактивации. Щелкнув границы на месте (другими словами, выбрав объект, не перемещая его и освобождая), маркеры можно включить и отключить. Допустимость расстояния для этого проверка можно настроить с помощью DragToggleThreshold, а само это поведение активации можно включить или отключить с помощью ToggleHandlesOnClick свойства .

Переключатель элемента управления

Дескрипторы можно вручную активировать или отключить из кода в любое время, задав параметр HandlesActive.

Автоматическое вычисление границ

BoundsControl попытается автоматически вычислить границы связанного объекта. Если необходимо использовать определенную фигуру границ, проверка OverrideBounds параметр и укажите объект границ напрямую. Система вычислений границ будет вычислять только границы для указанного объекта переопределения.

Влияет BoundsCalculationMethod на то, как алгоритм вычисляет границы. Если визуальная форма заключенного объекта не обязательно совпадает с коллайдером или наоборот, разработчики могут настроить метод вычисления, чтобы предпочтительнее использовать границы отрисовщика или коллайдера или сочетание обоих.

Независимо от метода вычисления, Padding параметр будет равномерно заполнять границы в единицах мира. Если границы сплощены, плоская ось не заполняется.

Преобразование в плоскую структуру

Плоский элемент BoundsControl

BoundsControl также можно использовать для управления двухd-содержимым. Если FlattenMode для задано значение Auto, BoundsControl преобразуется в прямоугольные двухугольные границы, если объект достаточно плоский вдоль любой оси. Если объект недостаточно плоский, но вам по-прежнему нужны прямоугольные границы, FlattenMode.Always всегда выполняет выравнивание BoundsControl вдоль самой плоской оси. И наоборот, FlattenMode.Never предотвращает сведение BoundsControl, даже если объект очень тонкий.

Параметры манипуляции

Поведение управления BoundsControl можно настроить несколькими способами. Параметр RotateAnchor управляет точкой вращения, вокруг которой вращается BoundsControl при использовании возможности поворота. Точки поворота некоторых объектов находятся далеко от их визуального центра, что может вызвать дискомфорт и неровность при манипуляциях с помощью маркеров поворота. При указании BoundsCenterRotateAnchor параметра BoundsControl всегда будет вращаться вокруг геометрического центра вычисляемых границ, а не фактического источника объекта.

Для поведения масштабирования можно задать значение Uniform или Non Uniform. В однородном режиме все оси объекта масштабируются вместе, сохраняя пропорции и внешний вид. Неоднородное масштабирование позволяет независимо масштабировать каждую ось объекта.