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

Bounding box

Примечание

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

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

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

Пример сцены

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

Bounding Box Examples

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

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

Примечание

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

Bounding Box 1

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

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

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

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

    // 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 Resources или 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 скрипт. Если этот скрипт добавлен, максимальный масштаб будет взят из него, а не из ограничивающего прямоугольника.

Отображение поля

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

Если для оси flatten задано значение Flatten Auto, сценарий запретит манипуляцию по оси с наименьшей степенью. Это приводит к 2D-ограничивающей рамке, которая обычно используется для тонких объектов.

Маркеры

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

События

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

  • Поворот запущен: срабатывает при запуске поворота.
  • Поворот завершен: срабатывает, когда поворот заканчивается.
  • Начало масштабирования: срабатывает при запуске масштабирования.
  • Завершено масштабирование: срабатывает при завершении масштабирования.
Events

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

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

Bounding Box Handle Styles

Ниже приведены префабы, материалы и значения масштабирования для дескрипторов ограничивающего прямоугольного поля 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 (делает захватируемый коллайдер немного больше, чем визуальный элемент дескриптора)

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

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

Proximity
  • Эффект близкого взаимодействия активен: включение активации дескриптора на основе близкого взаимодействия
  • Обработка средней близости: расстояние для масштабирования на 1-м шаге
  • Обработка близкого взаимодействия: расстояние для масштабирования на 2-м шаге
  • Far Scale: значение шкалы по умолчанию для ресурса дескриптора, если руки выходят за пределы диапазона взаимодействия ограничивающего прямоугольна (расстояние, заданное выше по оператору Handle Medium Proximity( Handle Medium Proximity). Используйте 0, чтобы скрыть дескриптор по умолчанию)
  • Средняя шкала: масштабируемое значение ресурса-дескриптора, если руки находятся в пределах диапазона взаимодействия ограничивающего прямоугольна (расстояние, заданное выше оператором Handle Close Proximity(Handle Close Proximity). Используйте 1 для отображения нормального размера)
  • Close Scale: Scale value of the handle asset when the hands are within the range of the grab interaction (distance defined above by 'Handle Close Proximity'. Используйте 1.x для отображения большего размера)

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

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

Manipulation Handler

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

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

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

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

Bounds Control Migrate