Функціональне тестування контролерів різних моделей шоломів

Вступ: типові проблеми сумісності контролерів VR Ми стикалися з ситуацією, коли додаток, що ідеально працює на Quest 2, на Quest Pro втрачає функціонал захоплення. Причина — різні Input Binding Profiles та API хіптики. Без функціонального тестування контролерів під кожну модель шолома такий баг г

Наші компетенції

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    95

Вступ: типові проблеми сумісності контролерів 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-кейсами, пріоритетами та рекомендаціями щодо виправлення. Вартість розраховується після отримання списку підтримуваних пристроїв та обсягу функціональності. Отримайте консультацію — оцінимо обсяг та терміни для вашого проєкту.