tags: [vr-ar]
Функциональное тестирование контроллеров различных моделей шлемов
Touch Pro у Quest Pro, Touch Plus у Quest 3, Touch у Quest 2, Index Knuckles, Valve Index, Reverb G2 — у каждого контроллера свой набор кнопок, осей, триггеров и хаптики. Приложение, разработанное под Quest 2, при запуске на Quest Pro неожиданно теряет функционал захвата, потому что Touch Pro имеет другую раскладку и другой haptic API.
Функциональное тестирование контроллеров — не «проверили на одном шлеме, работает». Это матричное покрытие всех поддерживаемых устройств с документированием каждого кейса.
Input mapping: где чаще всего рассыпается
OpenXR стандартизировал input через XR Input Binding Profiles. В Unity с XR Interaction Toolkit и OpenXR Plugin все контроллерные действия маппятся через InputActionAsset с несколькими binding profiles: Oculus Touch Controller Profile, Valve Index Controller Profile, HTC Vive Controller Profile, Windows Mixed Reality Controller Profile.
Частая проблема: binding настроен только для одного профиля. Разработчик добавил <XRInputBinding path="/user/hand/right/input/trigger/value"> без указания конкретного профиля — привязка применяется к «дефолтному» контроллеру и не срабатывает на Index Knuckles или WMR контроллерах.
Правильная настройка: для каждого действия в InputActionAsset добавляем bindings для всех поддерживаемых профилей. XR Interaction Toolkit предоставляет Default Input Actions ассет с преднастроенными мультипрофильными биндингами — хорошая отправная точка, но требует аудита под конкретный проект.
Специфика Meta Quest Pro: контроллеры Touch Pro имеют дополнительные сенсоры (stylus pointer, face buttons capacitive touch). Если приложение использует OVRInput напрямую вместо OpenXR Actions, нужно явно обрабатывать OVRInput.Controller.TouchPro как отдельный тип — иначе некоторые кнопки возвращают неверные значения.
Hand Tracking как альтернативный input
Quest 2, 3, Pro поддерживают Hand Tracking без контроллеров. Если приложение заявляет поддержку ручного трекинга, оно должно тестироваться отдельно — Hand Tracking имеет другой input pipeline и другие ограничения.
XR Hands Package (com.unity.xr.hands) предоставляет XRHandSubsystem с данными о 26 суставах каждой руки. Жесты реализуются через XRHandGesture компоненты или кастомную логику. Проблема: жест «щипок» (pinch) — основной способ взаимодействия без контроллера — срабатывает с задержкой и имеет ложные срабатывания при быстрых движениях пальцев.
Тест-кейсы для Hand Tracking отличаются от контроллерных: проверяем корректность детектирования в условиях плохого освещения, при перекрытии рук, при быстрых жестах. Фиксируем процент ложных срабатываний pinch при обычной пальцевой активности (набор текста, почёсывание носа — всё должно не триггерить игровые действия).
Матрица тестирования контроллеров
Функциональное тестирование ведётся по матрице: устройства × тест-кейсы. Минимальная матрица для Quest-first проекта:
| Тест-кейс | Quest 2 | Quest 3 | Quest Pro | Index |
|---|---|---|---|---|
| Trigger — захват объекта | ||||
| Grip — удержание | ||||
| A/B/X/Y кнопки | ||||
| Thumbstick locomotion | ||||
| Haptic feedback при взаимодействии | ||||
| Hand Tracking — pinch select | ||||
| Граничные случаи (разряженный контроллер) |
Каждая ячейка: Pass / Fail / Not Applicable + описание при Fail. Это живой документ, обновляемый с каждым билдом.
Хаптика: тестирование тактильного отклика
Touch Pro и Touch Plus имеют TruTouch haptic system — более точная вибрация с поддержкой амплитуды и частоты. Touch у Quest 2 — базовая вибрация с одним параметром интенсивности.
API отличается: OVRHaptics для нативного Meta, XRBaseController.SendHapticImpulse(amplitude, duration) для OpenXR. На Touch Pro через Meta XR SDK доступен OVRInput.SetControllerVibration с расширенными параметрами. Если использовать только базовый OpenXR haptic API, TruTouch на Pro контроллерах будет работать как обычная вибрация без использования преимуществ аппаратуры.
Тест: сравнение хаптики на Quest 2 и Quest 3/Pro при одинаковых game events. Удар мечом — разная интенсивность? Ожидаемо. Хаптика отсутствует полностью на одном устройстве — баг, фиксируем.
Сроки и формат работы
Функциональное тестирование контроллеров требует физического доступа к устройствам. Если у клиента нет тестовых шлемов — обсуждаем использование устройств с нашей стороны или аренду.
| Объём тестирования | Ориентировочные сроки |
|---|---|
| Один шлем, базовая матрица | 2–4 дня |
| 2–3 модели шлемов, полная матрица | 1–2 недели |
| Полное мультиплатформенное тестирование | 2–4 недели |
Результат работы — test matrix с документированными Fail-кейсами, приоритетами и рекомендациями по фиксу. Стоимость рассчитывается после получения списка поддерживаемых устройств и объёма функциональности.





