Unreal engine 5
August 22, 2022

UE5.0. Система навигации. Часть 2.

Продолжение https://teletype.in/@gonalulu.fm/85sDT58QIMx . Прошлая статья закончилась вопросами и замечаниями к созданному приложению. Правим недостатки. Лонга не получится, думаю за пару-тройку страниц уложусь.

1. Усложняем уровень.

Расставляю несколько десятков кубиков, заранее присваиваю им вес и обработку физики. Их можно перемещать персонажем (толкать, отбивать). Что позволяет динамически менять проходимость уровня. Тут стало заметно, что наша навигация работает только со статичными объектами, что плохо. Ищем объект RecastNavMesh-Default и смотрим свойства.

Параметр Runtime Generation как раз нам и нужен, выставляем в Dynamic и все работает.

2. Повторяющиеся элементы после рандомизатора.

Для этого проведем полный рефакторинг чертежа. Разнесем часть чертежа в функции. В итоге главные функции будут выглядеть следующим образом:

Функция PreMoveNPC - подготавливает данные для работы, а именно получает координаты куда двигаться.

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

Функция GetTarget - возвращает актера, к которому необходимо двигаться (из элементов массива).

Здесь реализована защита от повторения случайных чисел. Для этого добавляем две переменные CurrentIndex и NewIndex, значение по умолчанию -1. У обоих переменных. Для этого компилируем blueprint и в панели Details смотрим значение по умолчанию. При входе в функцию попадаем в цикл, который крутится пока новые параметры одинаковые. Как только разные, цикл завершится, произойдет присвоение переменных, по итогу CurrentTarget будет содержать объект-цель. Да, здесь отсутствует защита, когда в массиве будет ОДНА сфера. Считаю, что условия задачи у нас другие. Иначе, и алгоритм серьезно придется менять, случайный выбор тоже будет не нужен.

Функция GetCoordinates - возвращает координаты, куда движется пешка.

Тут все без изменений.

3. Отладочные сообщения.

Выводим информацию какой индекс массива выбран и координаты, куда движется пешка.

Необходимые переменные в наличии. FormatText позволяет отформатировать сообщение для вывода в одну строку. Все строки выводятся в левом верхнем углу и сгорают за 20 секунд. Из интересного, здесь есть несколько нодов для преобразования значений одного типа в другой. Выше была обработка ошибки при выполнении Is Valid, там строка выводится красным цветом и “живет” 50 секунд, чтобы было заметно.

Считаю, что в нынешнем состоянии все стало более понятнее и нагляднее. Но, задача по системе навигации не закрыта, следите за новостями.