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

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

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

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

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Налаштування навігаційних сіток (NavMesh) для VR локацій
Середня
~3-5 робочих днів
Часті питання

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

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

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

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

tags: [vr-ar]

Настройка навігаційних сіток для VR локацій

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

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

NavMeshSurface vs Legacy NavMesh

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

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

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

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

Сходи та вертикальні переходи у 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 та зони проходимості

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.carveOnlyStationary = true — оптимізація: вирізання відбувається тільки коли об'єкт зупинився. Рухомі об'єкти (катяча бочка) не викликають безперервний пересчет.

Строки та процес

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

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

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