Проєктування системи переміщення (Teleportation/Locomotion) у VR

Наша компанія з розробки відеоігор веде незалежні проекти, спільно з клієнтом створює ігри та надає додаткові операційні послуги. Досвід нашої команди дозволяє нам охопити всі ігрові платформи та розробити приголомшливий продукт, що відповідає баченню клієнта та перевагам гравців.

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Проєктування системи переміщення (Teleportation/Locomotion) у VR
Складна
~1-2 тижні
Часті питання

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

Які етапи розробки гри?

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    533

Проектування системи перемещения (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 тижнів

Вартість розраховується після аналізу ігрових вимог та цільових платформ.