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

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

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

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

Пример сцены

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

Bounds control Example

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

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

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

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

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

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

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

Устанавливает блочный объект для вычисления границ объекта.

Заполнение Box

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

Плоская ось

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

Сглаживание

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

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

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

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

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

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

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

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

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

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

Конфигурация дескрипторов масштабирования

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

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

Конфигурация дескрипторов вращения

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

  • Обработка материала: материал, примененный к маркерам.
  • Обрабатывающий извлеченный материал: материал, примененный к извлеченному маркеру.
  • Handle prefab: необязательный prefab для этого маркера. Если значение не задано, МРТК будет использовать сферу по умолчанию.
  • Размер маркера: размер маркера.
  • Дополнение к конфликту: заполнение, добавляемое в обработчик конфликта.
  • Рисовать модем при манипуляции: когда активно выводит линию модема с точки зрения начала взаимодействия с текущей рукой или положением указателя.
  • Дескрипторы игнорирования игнорируемых файлов: Если конфликт связан здесь, дескрипторы будут игнорировать любые конфликты с этим.
  • Handle prefab Type: тип "не используется" для созданного маркера.
  • Отображать маркер для x: управляет видимостью маркера для оси x.
  • Отобразить маркер для y: управляет видимостью маркера для оси y.
  • Отображать маркер для z: управляет видимостью маркера для оси z.

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

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

  • Обработка материала: материал, примененный к маркерам.
  • Обрабатывающий извлеченный материал: материал, примененный к извлеченному маркеру.
  • Handle prefab: необязательный prefab для этого маркера. Если значение не задано, МРТК будет использовать сферу по умолчанию.
  • Размер маркера: размер маркера.
  • Дополнение к конфликту: заполнение, добавляемое в обработчик конфликта.
  • Рисовать модем при манипуляции: когда активно выводит линию модема с точки зрения начала взаимодействия с текущей рукой или положением указателя.
  • Дескрипторы игнорирования игнорируемых файлов: Если конфликт связан здесь, дескрипторы будут игнорировать любые конфликты с этим.
  • Handle prefab Type: тип "не используется" для созданного маркера.
  • Отображать маркер для x: управляет видимостью маркера для оси x.
  • Отобразить маркер для y: управляет видимостью маркера для оси y.
  • Отображать маркер для z: управляет видимостью маркера для оси z.

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

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

Конфигурация эффектов с учетом расположения

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

Bounds control Proximity
  • Активно воздействие на близкое использование: Включение активации с помощью маркеров с учетом расположения
  • Средний уровень сходства объектов: расстояние для первого шага масштабирования
  • Близкое к близкому объекту: расстояние для второго шага масштабирования
  • Далеко масштаб: значение масштаба по умолчанию для ресурса-маркера, если руки выходят за пределы диапазона взаимодействия элемента управления границ (расстояние, определенное выше с помощью "маркер среднего сходства"). Использовать 0 для скрытия обработчика по умолчанию)
  • Средняя шкала: значение масштаба ресурса маркера, когда руки находятся в диапазоне взаимодействия элемента управления границ (расстояние, определенное выше с помощью маркера близкого сходства). Чтобы отобразить нормальный размер, используйте значение 1.
  • Закрытие шкалы: масштабирование значения ресурса-маркера, когда руки находятся в диапазоне взаимодействия (расстояние, определенное выше с помощью маркера близкого сходства). Используйте 1. x, чтобы отобразить больший размер)
  • Существенное увеличение скорости: оцените масштабированный объект с учетом масштаба, когда руки переходят с среднего на расстояние.
  • Средний коэффициент роста: оцените масштабированный масштабируемый объект, когда движение руки перемещается с среднего на близкое.
  • Закрыть скорость роста: оцените масштабированный масштабируемый объект, когда руки переходят от близкого к центру объектов.

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

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

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

Bounds control Constraints

События

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

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

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

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

Bounds control Elastics

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

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

Стили маркера управления границами 2

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

Bounds control HandleStyles

дескрипторы (программа установки для стиля HoloLens 2)

  • Обрабатывающий материал: баундингбоксхандлевхите.
  • Обработано извлеченный материал: баундингбоксхандлеблуеграббед.
  • Маркер масштабирования prefab: MRTK_BoundingBox_ScaleHandle. prefab
  • MRTK_BoundingBox_ScaleHandle_Slate prefab. prefab на планшетном маркере масштабирования.
  • Размер маркера масштабирования: 0,016 (1.6 cm)
  • Коэффициент масштабирования: 0,016 (делает переданный объект, который немного превышает обработку визуального элемента)
  • Маркер вращения prefab: MRTK_BoundingBox_RotateHandle. prefab
  • Размер маркера вращения: 0,016
  • Маркер поворота: 0,016 (делает переданный объект, который немного превышает обработку визуального элемента)

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

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

Bounds control Object Manipulator

Чтобы границы элемента управления применялись к тому же принципу, что и при их перемещении с помощью ObjectManipulator дальнего взаимодействия, рекомендуется соединить свои события для манипуляции, начатой для / манипуляции, которые заканчиваются BoundsControl.HighlightWires / BoundsControl.UnhighlightWires соответственно, как показано на снимке экрана выше.

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

  1. Добавить в объект конфликт Box
  2. Назначение BoundsControl скрипта объекту
  3. Настройка параметров, таких как методы активации (см. раздел Свойства инспектора ниже).
  4. Используемых назначение prefabs и материалов для элемента управления "границы стиля 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. Используемых назначьте prefabs и материалы для элемента управления с границами стиля HoloLens 2. Это по-прежнему требует назначений через инспектор, так как материалы и Prefabs должны загружаться динамически.

Примечание

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

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 к элементу управления. Поскольку элемент управления "границы" автоматически присоединяет и активирует диспетчер ограничений, Минмаксскалеконстраинт будет автоматически применен к изменениям преобразования после его присоединения и настройки.

Минмаксскалеконстраинт также можно использовать для установки минимального и максимального масштаба для 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>();
}

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

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

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

Bounds control Migrate

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