Вступ: типові проблеми сумісності контролерів VR
Ми стикалися з ситуацією, коли додаток, що ідеально працює на Quest 2, на Quest Pro втрачає функціонал захоплення. Причина — різні Input Binding Profiles та API хіптики. Без функціонального тестування контролерів під кожну модель шолома такий баг гарантовано потрапить у реліз. Наша команда провела понад 50 проєктів з тестування віртуальної реальності, включаючи човникові перевірки на 8 моделях шоломів. Виконуємо тестування під ключ — від налаштування стенду до фінального звіту. Економія бюджету на виправлення багів — до 40% порівняно з пост-релізними патчами.
Як правильно налаштувати Input Mapping для всіх контролерів?
OpenXR стандартизував input через OpenXR 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 як окремий тип — інакше деякі кнопки повертають невірні значення. OpenXR Actions краще OVRInput з точки зору кроссплатформенності: він автоматично підлаштовується під профіль, що знижує ризик багів.
Hand Tracking: альтернативний input, який часто ігнорують
Quest 2, 3, Pro підтримують Hand Tracking без контролерів. Якщо додаток заявляє підтримку ручного трекінгу, він має тестуватися окремо — Hand Tracking має інший input pipeline та інші обмеження.
XR Hands Package (com.unity.xr.hands) надає XRHandSubsystem з даними про 26 суглобів кожної руки. Жести реалізуються через XRHandGesture компоненти або кастомну логіку. Проблема: жест «щипок» (pinch) — основний спосіб взаємодії без контролера — спрацьовує із затримкою та має хибні спрацювання при швидких рухах пальців. У наших тестах відсоток хибних спрацювань pinch при звичайній пальцевій активності може досягати 15%, що неприйнятно для ігрових сценаріїв. Затримка реакції може становити 30–50 ms, що критично для ритмічних ігор.
Тест-кейси для Hand Tracking відрізняються від контролерних: перевіряємо коректність детектування в умовах поганого освітлення (менше 100 люкс), при перекритті рук, при швидких жестах. Фіксуємо відсоток хибних спрацювань та надаємо рекомендації з налаштування порогів чутливості. Отримання консультації з налаштування Hand Tracking дозволить скоротити час на налагодження.
Чому тестування хіптики критичне?
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 при однакових ігрових подіях. Удар мечем — різна інтенсивність? Очікувано. Хаптика відсутня повністю на одному пристрої — баг, фіксуємо.
Матриця тестування: що входить у роботу
Функціональне тестування ведеться за матрицею: пристрої × тест-кейси. Мінімальна матриця для 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. Це живий документ, що оновлюється з кожним білдом. Результат роботи — test matrix з документованими Fail-кейсами, пріоритетами та рекомендаціями щодо виправлення. Входить в обсяг: аудит Input Mapping, перевірка хіптики та Hand Tracking, стрес-тести граничних умов.
Список типових помилок при тестуванні контролерів
- Використання лише одного Input Binding Profile замість мультипрофільного
- Відсутність тестів хіптики на різних моделях
- Ігнорування Hand Tracking у сценаріях з контролерами
- Тестування лише на одному пристрої з лінійки
Терміни та формат роботи
Функціональне тестування контролерів потребує фізичного доступу до пристроїв. Якщо у клієнта немає тестових шоломів — обговорюємо використання пристроїв з нашого боку або оренду.
| Обсяг тестування | Орієнтовні терміни |
|---|---|
| Один шолом, базова матриця | 2–4 дні |
| 2–3 моделі шоломів, повна матриця | 1–2 тижні |
| Повне мультиплатформенне тестування | 2–4 тижні |
Результат роботи — test matrix з документованими Fail-кейсами, пріоритетами та рекомендаціями щодо виправлення. Вартість розраховується після отримання списку підтримуваних пристроїв та обсягу функціональності. Отримайте консультацію — оцінимо обсяг та терміни для вашого проєкту.






