ВАЖНО . Статья актуальна для версии 3.5 и выше
ВАЖНО - 2. Статья для GODOT 4 лежить вот тут!
Приветствую !
В годо обновили (портировали с Godot 4) систему навигации добавив NavigationServer с возможностью обхода динамических препятствий.
Всё это дело основано на библиотеке RVO2
Поэтому появилось некое непонимание в его работе, так как все старые уроки ссылаются на метод get_simple_path() который морально устарел, а новых уроков попросту нет.
К тому же, в годо при добавлении ноды Navigation2D вылетает предупреждение о том что эта нода будет удалена в следующих обновлениях !
В этой статье покажу вам как построить путь по новой схеме.
В общем и целом, для тех кто вообще не в курсе — навигация позволяет нам просчитать путь для персонажа на уровне, учитывая изгибы, препятствия и прочее.
Мы просто указываем точку, в которую персонажу надо пройти, и далее алгоритм сам прокладывает путь.
На гифке ниже пример:
На гифке ниже визуально показана поверхность по которой можно ходить, и путь по которому должен пройти персонаж.
Итак, для того чтобы проложить путь нам нужно :
а) Некий полигон , внутри которого нам будет позволено «ходить».
б) Нода NavigationAgent, которая будет просчитывать путь из точки А в точку Б.
Создаем сцену. Добавляем в неё NavigationPolygonInstance.
Открываем инспектор, и добавляем в ноду New NavigationPolygon
После чего, мы можем рисовать некую поверхность.
Я нарисовал вот такой лабиринт.
После того как в сцене появился полигон, добавляем ноду NavigationAgent2D, ноду Line2D (по желанию) и подключаем скрипт.
Сцена примерно будет выглядеть вот так:
Открываем редактор кода, и начинаем писать.
Для того чтобы получить путь, нам надо указать цель. В моем случае это будет курсор.
Далее получаем финальную позицию через get_final_location().
И затем получаем непосредственно путь, в виде массива с глобальными позициями точек пути.
Ну а чтобы нам было видно наш путь, я просто подаю этот массив в Line2d.
Запускаем , и наблюдаем результат.
Как видим, наш путь строится коректно.
Добавим еще один полигон в сцену так, чтобы он касался первого.
Запускаем проект, и видим что путь строится по двум полигонам !
Таким образом можно разъединять и соединять различные секции уровня, позволяя или запрещая персонажу двигаться в определенных участках.
Для исключения секций можно использовать так же меню слоёв навигации.
Например перенеся вторую секцию во второй слой, мы так же не получим возможности создания пути.
За сим всё, удачной разработки !
Подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !
#godot #gdscript #игровой движок #программирование #уроки