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

Object manipulator

ObjectManipulator позволяет в интуитивно понятном режиме манипулировать объектами в трехмерном пространстве с использованием любого устройства или метода ввода. Он работает аналогично XRGrabInteractable XRI, но поддерживает дополнительные функции и виды взаимодействия, оптимизированные для смешанной реальности. Хотя XRGrabInteractable полностью совместимы с нашими объектами interactor (и наоборот), мы все же рекомендуем использовать нашу реализацию.

Примечание

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

Архитектура

В MRTK версии 2 основная часть сложной логики и математических вычислений для различных типов входных данных обрабатывалась непосредственно системой ObjectManipulator. Для каждого типа взаимодействия необходим был отдельный путь к коду, что снижало гибкость при внедрении новых типов взаимодействий. В MRTK3 за преобразование в манипуляцию конкретного типа входных данных отвечает объект interactor. ObjectManipulator просто прослушивает объекты interactor и применяет к объекту соответствующее преобразование. В результате ObjectManipulator в MRTK3 значительно проще и компактнее. Сведения об обмене данными между объектами interactor с помощью преобразований подключения см. в описании архитектуры interactor.

n-ручные манипуляции

ObjectManipulator поддерживает любое количество объектов-участников interactor, что позволяет обобщить обработку взаимодействия для одно-, двух- и даже n-ручных манипуляций. Как правило, для многоручных взаимодействий используется геометрический центроид всех участвующих преобразований attachTransforms объектов interactor. В качестве интерактивного объекта XRI это решение совместимо с любым типом объекта interactor, который отправляет правильно работающее преобразование присоединения.

Если вы не хотите разрешать многоручные манипуляции, задайте для Selection Mode XRI значение Single. Мы присвоим этому свойству в инспекторе более понятное название Multiselect Mode, чтобы избежать путаницы с режимом Selection Mode в MRTK, который обозначает, является ли интерактивный объект переключаемым (дополнительные пояснения см. в документации по объекту Кнопка).

Multiselect mode

Ограничения

ObjectManipulator использует API Constraints для ограничения манипуляций. Дополнительные сведения см. в документации по ограничениям.

Внедрение логики манипуляции

Разработчики могут настраивать обработку манипуляций в ObjectManipulator без создания подкласса или изменения самого скрипта. Достаточно просто написать новый код ManipulationLogic<T> и указать тип в инспекторе.

Важно!

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