Элемент управления "Границы" — MRTK2

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

BoundsControl — это новый компонент для поведения манипуляции, ранее найденный в BoundingBox. Элемент управления "Границы" обеспечивает ряд улучшений и упрощений в настройке и добавляет новые функции. Этот компонент является заменой ограничивающего прямоугольника, который будет нерекомендуем.

Скрипт BoundsControl.cs предоставляет основные функциональные возможности для преобразования объектов в смешанной реальности. Элемент управления границами отображает поле вокруг голограммы, чтобы указать, что с ней можно взаимодействовать. Маркеры на углах и краях прямоугольника позволяют масштабировать, поворачивать или переводить объект. Элемент управления границами также реагирует на ввод данных пользователем. Например, на HoloLens 2 элемент управления границами реагирует на приближение пальца, предоставляя визуальную обратную связь, помогающую воспринимать расстояние от объекта. Все взаимодействия и визуальные элементы можно легко настроить.

Пример сцены

Примеры конфигураций элементов управления границами можно найти в сцене BoundsControlExamples .

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

Свойства инспектора

Целевой объект

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

Поведение активации

Существует несколько вариантов активации интерфейса элемента управления границами.

  • Активировать на начальном экране: элемент управления Границы становится видимым после запуска сцены.
  • Активировать по близкому расположению: элемент управления Границы становится видимым, когда сформулированная рука близка к объекту.
  • Активировать по указателю: элемент управления Границы становится видимым, когда на него нацеливает указатель ручного луча.
  • Активировать по близости и указателю: элемент управления Границы становится видимым, когда на него нацеливает указатель ручного луча или рука с шарнирной рукой близко к объекту.
  • Активировать вручную: элемент управления "Границы" не отображается автоматически. Его можно активировать вручную с помощью скрипта, перейдя к свойству boundsControl.Active.

Переопределение границ

Задает прямоугольный коллайдер из объекта для вычисления границ.

Заполнение коробки

Добавляет заполнение к границам коллайдера, используемым для вычисления экстентов элемента управления. Это повлияет не только на взаимодействие, но и на визуальные элементы.

Плоская ось

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

Сглаживание

Раздел сглаживания позволяет настроить режим сглаживания для масштабирования и поворота элемента управления.

Визуальные элементы

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

Объекты конфигурации

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

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

В настоящее время ограниченный элемент управления предлагает параметры объектов конфигурации для следующих функций:

Конфигурация box

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

  • Материал коробки: определяет материал, применяемый к отрисованной рамке, когда взаимодействие не выполняется. Поле будет отображаться только в том случае, если задан этот материал.
  • Материал, схваченный коробкой: материал для коробки, когда пользователь взаимодействует с элементом управления путем захвата с помощью ближнего или дальнего взаимодействия.
  • Шкала отображения плоской оси: шкала, применяемая к экрану поля, если одна из осей плоская.

Настройка дескрипторов масштабирования

Эта панель свойств позволяет изменять поведение и визуализацию дескрипторов масштабирования элемента управления границами.

  • Материал ручки: материал, применяемый к ручкам.
  • Материал, схваченный рукояткой: материал, примененный к захватимой ручке.
  • Заготовка дескриптора: необязательный заготовок для дескриптора масштабирования. Если параметр не задан, MRTK будет использовать куб по умолчанию.
  • Размер дескриптора масштабирования: размер дескриптора масштабирования.
  • Заполнение коллайдера: заполнение для добавления в коллайдер дескриптора.
  • Рисование троса при управлении. Если активная нарисовывает линию троса от точки начала взаимодействия до текущей позиции руки или указателя.
  • Обрабатывает игнорирует коллайдер: если коллайдер связывается здесь, дескриптор будет игнорировать любое столкновение с этим коллайдером.
  • Заготовка дескриптора: заготовка, используемая для дескриптора, когда элемент управления плоский.
  • Отображение дескрипторов масштабирования: управляет видимостью дескриптора.
  • Поведение масштабирования: можно задать равномерное или неоднородное масштабирование.

Настройка дескрипторов поворота

Эта конфигурация определяет поведение дескриптора поворота.

  • Материал ручки: материал, применяемый к ручкам.
  • Материал, схваченный рукояткой: материал, примененный к захватимой ручке.
  • Заготовка дескриптора: необязательный заготовка для дескриптора. Если значение не задано, MRTK будет использовать сферу по умолчанию.
  • Размер дескриптора: размер дескриптора.
  • Заполнение коллайдера: заполнение для добавления в коллайдер дескриптора.
  • Рисование троса при управлении. Если активная нарисовывает линию троса от точки начала взаимодействия до текущей позиции руки или указателя.
  • Обрабатывает игнорирует коллайдер: если коллайдер связывается здесь, дескриптор будет игнорировать любое столкновение с этим коллайдером.
  • Тип предварительного коллайдера handle: тип коллайдера, который будет использоваться с созданным дескриптором.
  • Показать дескриптор для X: управляет видимостью дескриптора для оси X.
  • Показать дескриптор для Y: управляет видимостью дескриптора для оси Y.
  • Показать дескриптор для Z: управляет видимостью дескриптора для оси Z.

Преобразование обрабатывает конфигурацию

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

  • Материал ручки: материал, применяемый к ручкам.
  • Материал, схваченный рукояткой: материал, примененный к захватимой ручке.
  • Заготовка дескриптора: необязательный заготовка для дескриптора. Если значение не задано, MRTK будет использовать сферу по умолчанию.
  • Размер дескриптора: размер дескриптора.
  • Заполнение коллайдера: заполнение для добавления в коллайдер дескриптора.
  • Рисование троса при управлении: при активном нарисовывает линию троса от точки начала взаимодействия до текущего положения руки или указателя.
  • Дескриптор игнорирует коллайдер. Если здесь связан коллайдер, дескриптор будет игнорировать любое столкновение с этим коллайдером.
  • Тип предварительного коллайдера обработки: тип коллайдера, используемый с созданным дескриптором.
  • Показать дескриптор для X: управляет видимостью дескриптора для оси X.
  • Показать дескриптор для Y: управляет видимостью дескриптора для оси Y.
  • Показать дескриптор для Z: управляет видимостью дескриптора для оси Z.

Конфигурация ссылок включает функцию каркаса элемента управления границами. Можно настроить следующие свойства:

  • Материал каркаса: материал, применяемый к сетке каркаса.
  • Радиус края проволочной рамки: толщина каркаса.
  • Проволочная форма: форма каркаса может быть кубическим или цилиндрическим.
  • Показать каркас: управляет видимостью каркаса.

Конфигурация эффекта близкого взаимодействия

Отображение и скрытие маркеров с анимацией в зависимости от расстояния до рук. Он содержит двухфакторную анимацию масштабирования. По умолчанию задано HoloLens 2 поведение стиля.

Близкое расположение элемента управления границами
  • Активный эффект близкого взаимодействия: включение активации дескриптора на основе близкого взаимодействия
  • Средняя близость объекта: расстояние для масштабирования на 1-м шаге
  • Близкое расположение объекта: расстояние для масштабирования на 2-м шаге
  • Дальней масштабируемости. Значение масштабирования по умолчанию для ресурса-дескриптора, когда руки находятся за пределы диапазона взаимодействия элемента управления (расстояние, заданное выше параметром Handle Medium Proximity). Используйте 0, чтобы скрыть дескриптор по умолчанию)
  • Средний масштаб. Масштабируемое значение актива-дескриптора, когда руки находятся в пределах диапазона взаимодействия элемента управления границ (расстояние, определенное выше параметром "Handle Close Proximity". Используйте значение 1 для отображения нормального размера)
  • Close Scale(Закрыть масштабирование): значение масштабирования актива-дескриптора, когда руки находятся в пределах диапазона взаимодействия захвата (расстояние, определенное выше параметром Handle Close Proximity). Используйте 1.x для отображения большего размера)
  • Скорость увеличения расстояния. Оцените масштаб объекта с учетом близкого расположения, когда рука перемещается от средней к дальней.
  • Средняя скорость роста. Оцените масштаб объекта близкого взаимодействия, когда рука перемещается от среднего к близкому расположению.
  • Close Grow Rate (Скорость увеличения близкого расстояния). Оцените масштаб объекта близкого взаимодействия, когда рука перемещается от близкого расположения к центру объекта.

Система ограничений

Элемент управления "Границы" поддерживает использование диспетчера ограничений для ограничения или изменения поведения преобразования, поворота или масштабирования при использовании дескрипторов элементов управления границ.

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

Ограничения элемента управления

События

Элемент управления "Границы" предоставляет следующие события. В этом примере эти события используются для воспроизведения аудио обратной связи.

  • Поворот запущен: срабатывает при начале поворота.
  • Вращение остановлено: срабатывает при остановке поворота.
  • Масштабирование запущено: срабатывает при запуске масштабирования.
  • Масштабирование остановлено: срабатывает при остановке масштабирования.
  • Перевод запущен: срабатывает при запуске перевода.
  • Перевод остановлен: срабатывает при остановке перевода.
События элемента управления

Эластичные (экспериментальные)

Эластики можно использовать при управлении объектами через элемент управления границами. Обратите внимание, что эластичная система по-прежнему находится в экспериментальном состоянии. Чтобы включить эластичные базы данных, свяжите существующий компонент диспетчера эластичных баз данных или создайте и свяжите новый диспетчер эластичных баз данных с помощью кнопки Add Elastics Manager .

Эластичные компоненты элемента управления

Стили обработки

По умолчанию при назначении скрипта BoundsControl.cs отображается дескриптор стиля HoloLens 1-го поколения. Чтобы использовать маркеры стиля HoloLens 2, необходимо назначить соответствующие заготовки и материалы дескрипторов.

Стили маркеров элемента управления

Ниже приведены заготовки, материалы и значения масштабирования для маркеров элементов управления HoloLens 2 границ стиля. Этот пример можно найти в сцене BoundsControlExamples .

HandleStyles элемента управления Bounds

Дескриптора (настройка стиля HoloLens 2)

  • Материал дескриптора: BoundingBoxHandleWhite.mat
  • Handle Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
  • Заготовка дескриптора масштабирования: MRTK_BoundingBox_ScaleHandle.prefab
  • Заготовка маркера масштабирования: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Размер маркера масштабирования: 0,016 (1,6 см)
  • Заполнение коллайдера дескриптора масштабирования: 0,016 (делает захватный коллайдер немного больше визуального элемента дескриптора)
  • Заготовка обработчика поворота: MRTK_BoundingBox_RotateHandle.prefab
  • Размер маркера поворота: 0,016
  • Заполнение коллайдера поворота: 0,016 (делает захватный коллайдер немного больше визуального элемента дескриптора)

Изменения преобразования с помощью манипулятора объекта

Элемент управления границами можно использовать в сочетании с , ObjectManipulator.cs чтобы разрешить определенные типы манипуляций (например, перемещение объекта) без использования дескрипторов. Обработчик манипуляции поддерживает взаимодействие с одной и двумя руками. Отслеживание рук можно использовать для взаимодействия с объектом близко.

Манипулятор объекта элемента управления

Чтобы ребра элемента управления границами работали одинаково при перемещении с помощью ObjectManipulatorудаленного взаимодействия, рекомендуется подключить его события для on manipulation startedOn Manipulation Started On Manipulation Ended to ( On Manipulation Started / On Manipulation Ended) к BoundsControl.HighlightWires / BoundsControl.UnhighlightWires , как показано на снимке экрана выше.

Добавление и настройка элемента управления границами с помощью инспектора Unity

  1. Добавление Box Collider в объект
  2. Назначение BoundsControl скрипта объекту
  3. Настройка параметров, таких как методы активации (см. раздел "Свойства инспектора " ниже)
  4. (Необязательно) Назначение заготовок и материалов для элемента управления границами стиля HoloLens 2 (см. раздел "Стили обработки" ниже)

Примечание

Используйте поле Целевой объект и Переопределение границ в инспекторе, чтобы назначить определенный объект и коллайдер в объекте с несколькими дочерними компонентами.

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

Добавление и настройка элемента управления границами в коде

  1. Создание экземпляра куба GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Назначение BoundsControl скрипта объекту с коллайдером с помощью AddComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Настройте параметры непосредственно в элементе управления или с помощью одной из доступных для сценариев конфигураций (см. раздел Свойства иконфигурации инспектора ниже).

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (Необязательно) Назначьте заготовки и материалы для элемента управления границами стиля HoloLens 2. Это по-прежнему требует назначения через инспектора, так как материалы и заготовки должны загружаться динамически.

Примечание

Использовать папку "Ресурсы" Unity или Shader.Find для динамической загрузки шейдеров не рекомендуется, так как перестановки шейдеров могут отсутствовать во время выполнения.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Пример. Установка минимального, максимального масштаба элемента управления с помощью MinMaxScaleConstraint

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

Вы также можете использовать MinMaxScaleConstraint, чтобы задать минимальный и максимальный масштаб для ObjectManipulator.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Пример. Добавление элемента управления границами вокруг игрового объекта

Чтобы добавить элемент управления границами вокруг объекта, просто добавьте BoundsControl в него компонент:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Миграция с ограничивающего прямоугольника

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

Для обновления отдельных экземпляров ограничивающего прямоугольника также есть параметр миграции внутри инспектора свойств компонента.

Миграция элемента управления

См. также раздел