Ограничивающий прямоугольник — MRTK2

Ограничивающий прямоугольник

Примечание

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

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

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

Пример сцены

Примеры конфигураций ограничивающих прямоугольник можно найти в сцене BoundingBoxExamples .

Примеры ограничивающего прямоугольника

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

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

Примечание

Используйте поле Target Object и Bounds Override в инспекторе, чтобы назначить определенный объект и коллайдер в объекте с несколькими дочерними компонентами.

Ограничивающий прямоугольник 1

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

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

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

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Настройка параметров (см. раздел свойств Inspector ниже)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Необязательно) Назначьте заготовки и материалы для ограничивающей рамки HoloLens 2 стилем. Для этого по-прежнему требуется назначение через инспектора, так как материалы и заготовки должны загружаться динамически.

Примечание

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

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

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

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

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Пример. Добавление ограничивающего прямоугольника вокруг игрового объекта

Чтобы добавить ограничивающий прямоугольник вокруг объекта, просто добавьте BoundingBox в него компонент:

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

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

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

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

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

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

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

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

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

Минимальный масштаб

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

Максимальное масштабирование

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

Отображение прямоугольника

Различные параметры визуализации ограничивающего прямоугольника.

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

Маркеры

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

События

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

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

Стили дескрипторов

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

Стили дескрипторов ограничивающего прямоугольника

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

HandStyles 2

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

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

Близкое взаимодействие (настройка стиля HoloLens 2)

Отображение и скрытие дескрипторов с анимацией на основе расстояния до рук. В ней есть двухфакторная анимация масштабирования.

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

Перемещение объекта с помощью обработчика манипуляций

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

Обработчик манипуляций

Чтобы края ограничивающего прямоугольника работали одинаково при перемещении с помощью ManipulationHandlerудаленного взаимодействия, рекомендуется подключить события для параметра On Manipulation Started On Manipulation Started / On Manipulation EndedBoundingBox.HighlightWires / BoundingBox.UnhighlightWires к соответственно, как показано на снимке экрана выше.

Переход на элемент управления "Границы"

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

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

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