Если коротко:
Unity XR Interaction Toolkit (XRI) связывает источник действия с объектом через три роли: Interactor на руке или луче находит цель, Interactable описывает доступные реакции, а XR Interaction Manager согласует Hover, Select, Focus и Activate. Input Actions передают позу и кнопки контроллера. Starter Assets дают готовые actions, presets и XR Origin, но их нужно импортировать под закреплённую версию пакета.
Unity XR Interaction Toolkit VR-проекту даёт готовую модель взаимодействий с 3D-объектами и интерфейсом. XRI не заменяет OpenXR provider, Input System или render pipeline: пакет получает ввод и позы от настроенной XR-среды, определяет допустимые цели и меняет состояния interaction. Ниже используется released API XRI 3.3.2 для Unity 6000.0 и новее.
Из каких частей состоит interaction
Interactor представляет источник намерения, например руку или controller. XR Direct Interactor ищет объекты рядом с рукой, XR Ray Interactor работает по лучу, XR Poke Interactor — через касание, а XR Socket Interactor удерживает предмет в заданном месте. Компонент собирает допустимые targets, но не описывает их поведение.
Interactable находится на цели. XR Grab Interactable отвечает за захват, XR Simple Interactable позволяет обработать события без готовой механики. Collider задаёт область обнаружения, а Interaction Layer Mask фильтрует пары независимо от physics layers.
XR Interaction Manager регистрирует обе стороны и согласует переходы между Hover, Select, Focus и Activate. Hover означает подходящую цель, Select — начатое основное действие, Activate — дополнительную команду для уже выбранного объекта. В загруженных сценах нужен хотя бы один manager; обычно достаточно одного.
Input Actions и поза контроллера
В XRI 3.3 input readers получают значения из Input System. Action связывает команду Select, Activate, перемещение или поворот с физической кнопкой. В Starter Assets Select назначен на grip, а locomotion — на thumbstick; это пример, а не обязательная схема.
Tracked Pose Driver читает position и rotation устройства и применяет их к Transform. Если луч двигается, но захват не начинается, проверяйте binding. Если кнопка срабатывает, а рука стоит на месте — pose actions и XR provider.
Минимальная сцена по шагам
- В Window → Package Manager установите XR Interaction Toolkit и совместимые XR Plug-in Management, OpenXR Plugin и Input System.
- Выберите provider для целевой платформы и исправьте ошибки Project Validation. Полная основа проекта описана в инструкции по Unity и OpenXR.
- В разделе Samples пакета импортируйте Starter Assets.
- Добавьте prefab XR Origin из sample и убедитесь, что в сцене есть XR Interaction Manager.
- Создайте Cube с Collider и Rigidbody, затем добавьте
XR Grab Interactable. - Запустите проект в headset: наведите руку или ray, нажмите Select, переместите объект и отпустите его.
Если объект не определяется, сравните Interaction Layer Mask и проверьте Collider. Если Hover есть, а Select нет, проверьте action map, binding и включение asset. При дрожании предмета проверьте Rigidbody, Movement Type и scripts, записывающие Transform.
Зачем нужны Starter Assets
Starter Assets содержат XRI Default Input Actions.inputactions, presets, prefabs XR Origin, locomotion, teleport и Demo Scene. Sample копируется в Assets/Samples/XR Interaction Toolkit/[version]/Starter Assets: это часть проекта, а не автоматически обновляемый package cache.
При обновлении Starter Assets поверх старой копии могут разорваться script references. Unity рекомендует удалить прежнюю папку sample перед импортом; свои bindings и prefab variants лучше хранить отдельно.
Почему версию XRI нужно фиксировать
XRI 3.3.2 совместим с Unity 6000.0+. Другие released ветки и preview 3.4 могут иметь иные поля, namespaces и callbacks. Часть старого API заменена интерфейсами IXRInteractor и IXRInteractable.
Перед переносом tutorial запишите версии Unity, XRI, Input System и OpenXR Plugin из manifest.json и packages-lock.json. Обновляйте пакет в отдельной копии и повторяйте тесты Hover, Select, Activate, UI и locomotion.