Ограничения — MRTK3

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

Примечание

В настоящее время MRTK3 предлагает ограниченное подмножество ограничений из MRTK 2.x. В настоящее время мы изучаем возможность рефакторинга системы ограничений, чтобы унифицировать рабочий процесс разработки с использованием решателей и эластичных компонентов. Оставайтесь на связи!

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

Диспетчер ограничений может работать в двух режимах:

  • Автоматический выбор ограничения
  • Выбор ограничения вручную

Выбор ограничения

Автоматический выбор ограничения

Auto Selection mode

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

Выбор ограничения вручную

Manual Selection mode

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

Примечание

Действие Удалить запись позволяет удалить ограничение лишь из списка выбора вручную. Компонент по-прежнему будет присутствовать в GameObject.

Порядок выполнения

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

Ограничения преобразования

Ограничения можно использовать, чтобы ограничить манипуляцию. Например, для некоторых приложений может потребоваться поворот и чтобы объект оставался в вертикальном положении. В этом случае можно добавить объект RotationAxisConstraint и использовать его для ограничения поворота до поворота оси Y. MRTK предоставляет несколько ограничений, которые описаны ниже.

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

Все ограничения, предоставляемые MRTK, имеют следующие свойства:

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

  • Одна рука: ограничение будет использоваться во время манипуляции одной рукой (если выбрано).
  • Две руки: ограничение будет использоваться во время манипуляции двумя руками (если выбрано).

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

  • Ближнее: ограничение будет использоваться во время манипуляции ближнего взаимодействия (если выбрано).
  • Дальнее: ограничение будет использоваться во время манипуляции дальнего взаимодействия (если выбрано).

FaceUserConstraint

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

Demonstration of FaceUserConstraint

MinMaxScaleConstraint

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

Demonstration of MinMaxScaleConstraint