Навігація в реальному часі (3D)

Вступ

Пошук шляхів у 3D-середовищі має вирішальне значення для багатьох ігор, адже саме так некеровані персонажі або об'єкти зазвичай знаходять свій шлях у середовищі. Godot надає декілька вузлів для цієї мети:

Карта та області навігації

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

Щоб створити область навігації, додайте до 3D-сцени вузол NavigationMeshInstance. Далі в інспекторі для цього меша створіть або додайте NavigationMesh. Навігаційний меш містить опції для генерування області під час запікання. Параметри геометрії визначають, які вузли та типи вузлів використовуються для запікання меша. Повний опис кожного параметра і того, як він працює, можна знайти у довідці класу NavigationMesh.

Після того, як параметри налаштовано належним чином, натисніть кнопку "Bake NavMesh" (Запекти навігаційний меш) у верхній частині інспектора, щоб згенерувати область.

../../_images/bake_navmesh.png

Примітка

Її також можна згенерувати під час виконання за допомогою методу bake_navigation_region() вузла області навігації.

Після завершення генерації меша ви побачите прозорий навігаційний меш над областями сцени, до яких можна переміщатися.

../../_images/baked_navmesh.png

Майте на увазі, що навігаційний меш показує, куди може йти центр об'єкта. Наприклад, якщо ви встановите радіус агента на 0,5, то ваш навігаційний меш має мати відстань 0,5 до будь-яких виступів, або стін, щоб запобігти врізанню в стіну, або звисанню з краю.

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

RVO processing

RVO це зворотна швидкісна перешкода (Reciprocal Velocity Obstacle). Обробка RVO - це спосіб пошуку шляху з урахуванням інших агентів та фізичних тіл, які також рухаються.

Щоб скористатися нею, встановіть ціль, як зазвичай. Потім агенту потрібно отримати розташування наступного місця навігаційного шляху і обчислити швидкість до цього місця. Замість того, щоб використовувати це значення для руху, використовуйте його для встановлення швидкості агента за допомогою set_velocity. Після цього буде згенеровано і відправлено з сигналом velocity_computed нову швидкість, яка враховує інші агенти та перешкоди.

Однак агенти можуть враховувати лише певну кількість інших агентів, що знаходяться поруч, це властивість агента max neighbors, і її можна змінювати. Це не обмеження кількості агентів, які можуть одночасно використовувати область навігації.

Генерація шляху (старий метод)

Це старий метод створення навігаційного шляху, його буде вилучено у Godot 4. Спочатку додайте навігаційний вузол до сцени, потім додайте екземпляр навігаційної меша як його дочірній елемент і налаштуйте навігаційний меш.

Щоб отримати шлях між двома областями на карті, ви використовуєте метод вузла навігації get_simple_path(). Перший аргумент - це Vector3 початкового розташування, наступний - Vector3 кінцевого розташування. І останній аргумент є логічним значенням яке визначає, чи враховуються властивості агента навігаційного меша під час генерування шляху.

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