Найти тему

№156. Навигация. Поиск пути.

ВАЖНО . Статья актуальна для версии 3.5 и выше

ВАЖНО - 2. Статья для GODOT 4 лежить вот тут!

Приветствую !

В годо обновили (портировали с Godot 4) систему навигации добавив NavigationServer с возможностью обхода динамических препятствий.
Всё это дело основано на библиотеке
RVO2 Поэтому появилось некое непонимание в его работе, так как все старые уроки ссылаются на метод get_simple_path() который морально устарел, а новых уроков попросту нет.
К тому же, в годо при добавлении ноды Navigation2D вылетает предупреждение о том что эта нода будет удалена в следующих обновлениях !

В этой статье покажу вам как построить путь по новой схеме.

В общем и целом, для тех кто вообще не в курсе — навигация позволяет нам просчитать путь для персонажа на уровне, учитывая изгибы, препятствия и прочее.
Мы просто указываем точку, в которую персонажу надо пройти, и далее алгоритм сам прокладывает путь.

На гифке ниже пример:

-2

На гифке ниже визуально показана поверхность по которой можно ходить, и путь по которому должен пройти персонаж.

-3

Итак, для того чтобы проложить путь нам нужно :
а) Некий полигон , внутри которого нам будет позволено «ходить».
б) Нода NavigationAgent, которая будет просчитывать путь из точки А в точку Б.

Создаем сцену. Добавляем в неё NavigationPolygonInstance.
Открываем инспектор, и добавляем в ноду New NavigationPolygon

-4

После чего, мы можем рисовать некую поверхность.
Я нарисовал вот такой лабиринт.

-5

После того как в сцене появился полигон, добавляем ноду NavigationAgent2D, ноду Line2D (по желанию) и подключаем скрипт.
Сцена примерно будет выглядеть вот так:

-6

Открываем редактор кода, и начинаем писать.
Для того чтобы получить путь, нам надо указать цель. В моем случае это будет курсор.
Далее получаем финальную позицию через get_final_location().
И затем получаем непосредственно путь, в виде массива с глобальными позициями точек пути.
Ну а чтобы нам было видно наш путь, я просто подаю этот массив в Line2d.

-7

Запускаем , и наблюдаем результат.

-8

Как видим, наш путь строится коректно.

Добавим еще один полигон в сцену так, чтобы он касался первого.

-9

Запускаем проект, и видим что путь строится по двум полигонам !

-10

Таким образом можно разъединять и соединять различные секции уровня, позволяя или запрещая персонажу двигаться в определенных участках.

-11

Для исключения секций можно использовать так же меню слоёв навигации.

-12

Например перенеся вторую секцию во второй слой, мы так же не получим возможности создания пути.

-13

За сим всё, удачной разработки !
Подписывайтесь на канал,
вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !

#godot #gdscript #игровой движок #программирование #уроки