Налаштування навігаційних сіток (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






