Налаштування навігаційних сіток (NavMesh) для VR-локацій

Налаштування навігаційних сіток (NavMesh) для VR-локацій Ми займаємося VR-розробкою понад 7 років і за цей час реалізували понад 30 проєктів з навігацією NPC. Одна з частих проблем — стандартний NavMesh не враховує особливості VR: дискомфорт гравця через надто близьке проходження ворогів, некорек

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

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

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

Налаштування навігаційних сіток (NavMesh) для VR-локацій

Ми займаємося VR-розробкою понад 7 років і за цей час реалізували понад 30 проєктів з навігацією NPC. Одна з частих проблем — стандартний NavMesh не враховує особливості VR: дискомфорт гравця через надто близьке проходження ворогів, некоректна обробка сходів і платформ. У цій статті ділимося досвідом налаштування NavMesh для VR, щоб ви уникнули типових помилок.

NavMesh для VR-локацій — не те саме, що NavMesh для звичайної гри. У VR простір сприймається інакше: NPC або ворог, який проходить надто близько до гравця, викликає фізичний дискомфорт. NavMesh має це враховувати — зокрема через налаштування агентських радіусів і масок прохідності.

Крім того, VR-локації часто мають складну вертикальну геометрію: сходи, платформи, перила, нерівну підлогу. Стандартний NavMesh Bake з Unity Window → AI → Navigation тут дає некоректні результати без додаткового налаштування.

Чому NavMeshSurface краще за Legacy для VR?

Компонент NavMeshSurface з AI Navigation пакету (com.unity.ai.navigation) замінює застарілий вбудований NavMesh Bake. Ключові відмінності для VR:

  • Рантайм-генерація: NavMeshSurface можна запікати в рантаймі, що необхідно для процедурно-генерованих VR-локацій. У legacy режимі NavMesh статичний. Для VR-ігор з руйнівною геометрією (розбиті ящики, стіни, що впали) потрібно або перераховувати NavMesh локально через UpdateNavMeshData з обмеженою областю NavMeshBuildSettings.Bounds, або використовувати NavMeshObstacle для тимчасового блокування зон.
  • Продуктивність: При зміні геометрії NavMeshSurface перераховує сітку в 2–3 рази швидше, ніж Legacy, завдяки оптимізованому алгоритму побудови.

Agent Type — критичне налаштування. Для VR створюємо мінімум два типи агентів: Enemy_Standard з радіусом 0.35 м (щільна навігація) та Enemy_Large з радіусом 0.6 м (боси, великі істоти). Якщо використовувати один тип для всіх, великі істоти будуть «влазити» у вузькі коридори, що виглядає неправдоподібно.

Step Height — максимальна висота сходинки, яку агент долає без NavMeshLink. Для VR-локацій з реалістичною архітектурою: 0.25 м — це одна стандартна сходинка. Якщо сходинки вищі — потрібні NavMeshLink компоненти.

Порівняння типів агентів:

Параметр Enemy_Standard Enemy_Large
Радіус 0.35 м 0.6 м
Step Height 0.25 м 0.3 м
Max Slope 45° 30°
Застосування Звичайні вороги, натовп Боси, важкі істоти

Як налаштувати сходи та вертикальні переходи у VR?

Сходи в NavMesh — постійний головний біль. За замовчуванням NavMesh bake не обробляє сходи коректно: або не покриває їх взагалі (надто крутий нахил), або створює NavMesh прямо по геометрії сходинок — із зубчастим профілем, по якому агенти рухаються стрибками.

Правильне рішення для VR: для кожних сходів створюємо NavMeshLink з точкою старту внизу та точкою фінішу вгорі. Агент телепортується між ними миттєво, а анімація підйому по сходах грає як окремий стан в Animator. Це значно чистіше, ніж спроби змусити NavMeshAgent фізично підніматися по сходинках.

Для відкритих балконів і платформ: два окремих NavMeshSurface (нижній рівень + верхній), з'єднані NavMeshLink на сходах і ліфтах. NavMeshLink має бути двостороннім (Bidirectional = true), якщо агент може йти в обидва боки.

Off Mesh Link (застарілий варіант) і NavMeshLink (новий) відрізняються: Off Mesh Link вимагає ручного вказання двох точок на сцені, NavMeshLink — компонент з Area Mask та шириною лінка. Для VR краще NavMeshLink — він коректніше обробляє багатокористувацькі перетини (кілька агентів одночасно).

Які Area Masks критичні для VR?

NavMesh Area дозволяє розмітити поверхні за типами: Walkable, Not Walkable, Jump. У VR додаємо кастомні: Dangerous (зона вогню, прірва — агент проходить лише якщо немає іншого шляху), PlayerPersonalSpace (3-метрова зона навколо спавна гравця — вороги не заходять туди без агресивного тригера).

PlayerPersonalSpace реалізується через NavMeshModifierVolume з типом Not Walkable, прикріплений до об'єкта гравця з offset. При наближенні ворога тригер знімається, область перераховується через NavMesh.AddNavMeshData для локального патча. Це грубо, але дає ефект «ворог не лізе прямо в обличчя».

Динамічні перешкоди: NavMeshObstacle

NavMeshObstacle — компонент для динамічних об'єктів, які блокують шлях агентів. Два режими: Carve = false (об'єкт просто розштовхує агентів як фізичне тіло) та Carve = true (об'єкт вирізає дірку в NavMesh).

Carve = true перераховує NavMesh у реальному часі — дороговартісна операція. Для VR з руйнівним оточенням не можна вішати Carve на кожен ящик: при одночасному руйнуванні 10 об'єктів кожен ініціює перерахунок NavMesh. Правильний підхід: Carve = false для об'єктів, які зникають (вони й так ідуть зі шляху), Carve = true лише для об'єктів, які утворюють постійні перешкоди (стіна, що впала, підлога, що обвалилася).

Оптимізація NavMeshObstacle.Carve `NavMeshObstacle.carveOnlyStationary = true` — оптимізація: вирізання відбувається лише коли об'єкт зупинився. Рухомі об'єкти (котиться бочка) не викликають безперервний перерахунок. Також використовуйте `NavMeshBuildSettings` для обмеження області перерахунку.

Що входить у роботу з налаштування NavMesh

При замовленні послуги під ключ ви отримуєте:

  • Аудит геометрії локації (статична/динамічна, складність вертикального простору, кількість агентів).
  • Налаштування Agent Types та Area Masks під ваші сценарії.
  • Запікання базового NavMesh з урахуванням VR-особливостей (зона комфорту гравця).
  • Встановлення NavMeshLink для сходів, платформ, ліфтів.
  • Тестування на стрес-сценаріях з кількома агентами.
  • Документація з налаштувань та рекомендації щодо підтримки.
  • Гарантія відсутності багів навігації протягом 30 днів після здачі.

Процес і терміни

Робота починається з аудиту геометрії локації: статична/динамічна, складність вертикального простору, кількість агентів. Потім налаштування Agent Types, Area Masks, запікання базового NavMesh. Далі — тестування на всіх переходах (сходи, платформи) та налаштування NavMeshLink. Фінально — тест з кількома агентами одночасно на стрес-сценаріях.

Масштаб локації Орієнтовні терміни
Одна кімната / невелика арена 2–4 дні
Багаторівнева локація (2–4 поверхи) 1–2 тижні
Відкритий світ / процедурна генерація 3–8 тижнів

Вартість розраховується після аналізу геометрії локацій та вимог до навігаційної поведінки агентів. Оцінимо ваш проєкт безкоштовно — напишіть нам для консультації.

Зв'яжіться з нами, щоб замовити налаштування NavMesh для вашого VR-проєкту. Ми гарантуємо якість та дотримання термінів.

Детальніше про NavMeshSurface у документації Unity: NavMeshSurface