Проектування системи перемещения (Teleportation/Locomotion) в VR
Рух у VR — це не геймплейна дрібниця. Це основна причина, по якій гравці кидають VR-гри в перші 20 хвилин або повертаються щодня. Неправильно реалізована локомоція — прямий шлях до motion sickness. Правильна — це прозора система, яку гравець перестає замічати через кілька хвилин.
Фізика дискомфорту: чому плавне рух тошнить
Motion sickness у VR виникає через vection — ілюзію руху при його відсутності в реальності. Зрительна система повідомляє мозку «ми рухаємось», вестибулярний апарат — «ми стоїмо», конфлікт викликає тошноту у 40–60% аудиторії при першому досвіді.
Плавне рух через стик — максимальний trigger для vection. Це не значить, що його не можна використовувати. Це значить, що його потрібно реалізувати з mitigation механіками.
Головний з них — locomotion vignette. При русі периферійне зрення (за межами 40–50° від центра) затемнюється через tinted overlay. Мозок сприймає рух тільки центральною зоною, що знижує vection. У Unity це реалізується через post-processing Vignette effect з динамічною інтенсивністю, прив'язаною до скорості руху, або через спеціалізований компонент — TunnelingVignette у XRIT 3.x.
Параметри vignette для стартової настройки: easeInTime = 0.15 с, easeOutTime = 0.3 с, featheringEffect = 0.3, vignetteIntensity = 0.6. Все це потрібно вивести у Comfort Settings — різні гравці мають різний поріг чутливості.
Телепортація: не просто «перенести позицію»
Телепортація здається простою: нажав кнопку, вибрав точку, переміститися. На дійсності є кілька деталей, які розділяють «працює» та «працює добре».
Arc візуалізація — парабола від контролера до точки телепортації. У XRIT реалізується через XRRayInteractor у режимі Projectile Curve + TeleportationProvider. Параметри параболи: velocity = 8–12 (менше — дуга занадто крутая, більше — занадто пологая), acceleration = -9.8 (гравітація). Точка попадання визначається через raycast проти Teleportation Area/Anchor colliders з Layer Mask тільки на Teleportation шар.
Валідність точки телепортації. Не можна телепортуватися в повітря, у стіну, у NavMesh-недоступну зону. TeleportationArea перевіряє тільки наявність коллайдера, не NavMesh. Якщо потрібна перевірка по NavMesh — кастомний TeleportationArea з override ValidateTeleportation, який викликає NavMesh.SamplePosition в точці приземління.
Орієнтація після телепортації. Простий варіант: зберегти поточну орієнтацію. Кращий варіант: дати гравцю вказати напрямок погляду після телепортації через ротацію стика в момент утримання кнопки. TeleportationProvider підтримує MatchOrientation = TargetUpAndForward — XR Origin повертається так, що гравець після телепортації дивиться у вказаному напрямку.
Transition анімація. Миттєва телепортація — різка. Fade to black + fade in за 0.2–0.3 с — не затримує гравця, але прибирає «прибуток» камери. Реалізація: ScreenFadeProvider у Locomotion System, який перехоплює TeleportationProvider.teleportRequest та додає fade через корутину перед фактичним перемещением XR Origin.
Гібридна система: коли потрібні обидва типи
Більшість сучасних VR-ігор використовують обидва типи локомоції та дають гравцю вибір у налаштуваннях. Архітектура Locomotion System у XRIT це підтримує: на одному LocomotionSystem можна зареєструвати кілька LocomotionProvider одночасно.
Важливий нюанс: ContinuousMoveProvider та TeleportationProvider можуть конфліктувати при одночасному вводі. LocomotionSystem має exclusivityMode — коли один провайдер активний, інші блокуються. Це правильне поведінку, але потрібно переконатися, що пріоритети розставлені коректно: телепортація повинна мати пріоритет над плавним рухом.
Snap Turn vs Smooth Turn
Snap Turn — миттєвий поворот на фіксований кут (зазвичай 30°, 45° або 60°). Не викликає дискомфорту — немає continuous rotation. Реалізується через SnapTurnProvider. Настройки: turnAmount = 45°, debounceTime = 0.2 с (щоб не вертітися занадто швидко при утриманні стика).
Smooth Turn — безперервний поворот через ContinuousTurnProvider. Викликає менше дискомфорту, ніж плавне рух вперед, але все рівно неприємний частині аудиторії. Максимально допустима швидкість повороту для comfort: 60–90°/с.
Для боєвих ігор, де важлива швидка орієнтація — hybrid: snap turn з невеликим кутом (22.5° або 30°) дозволяє швидко розворачиватися без дискомфорту.
| Система | Ориентировочні терміни |
|---|---|
| Базова телепортація (XRIT з коробки) | 3–5 днів |
| Телепортація + smooth + snap + настройки | 1–2 тижня |
| Кастомна система з NavMesh + transition + vignette | 2–4 тижня |
| Повна locomotion система з comfort profiles | 3–5 тижнів |
Вартість розраховується після аналізу ігрових вимог та цільових платформ.





