UE5.0. Система навигации. Часть 2.
Продолжение https://teletype.in/@gonalulu.fm/85sDT58QIMx . Прошлая статья закончилась вопросами и замечаниями к созданному приложению. Правим недостатки. Лонга не получится, думаю за пару-тройку страниц уложусь.
Расставляю несколько десятков кубиков, заранее присваиваю им вес и обработку физики. Их можно перемещать персонажем (толкать, отбивать). Что позволяет динамически менять проходимость уровня. Тут стало заметно, что наша навигация работает только со статичными объектами, что плохо. Ищем объект RecastNavMesh-Default и смотрим свойства.
Параметр Runtime Generation как раз нам и нужен, выставляем в Dynamic и все работает.
2. Повторяющиеся элементы после рандомизатора.
Для этого проведем полный рефакторинг чертежа. Разнесем часть чертежа в функции. В итоге главные функции будут выглядеть следующим образом:
Функция PreMoveNPC - подготавливает данные для работы, а именно получает координаты куда двигаться.
В данной функции обрабатывается ошибка по заполнению массива целей, в случае ошибки программа определяет координаты игрока и пешка идет к игроку, видимо намекая, чтобы тот прописал правильно параметры.
Функция GetTarget - возвращает актера, к которому необходимо двигаться (из элементов массива).
Здесь реализована защита от повторения случайных чисел. Для этого добавляем две переменные CurrentIndex и NewIndex, значение по умолчанию -1. У обоих переменных. Для этого компилируем blueprint и в панели Details смотрим значение по умолчанию. При входе в функцию попадаем в цикл, который крутится пока новые параметры одинаковые. Как только разные, цикл завершится, произойдет присвоение переменных, по итогу CurrentTarget будет содержать объект-цель. Да, здесь отсутствует защита, когда в массиве будет ОДНА сфера. Считаю, что условия задачи у нас другие. Иначе, и алгоритм серьезно придется менять, случайный выбор тоже будет не нужен.
Функция GetCoordinates - возвращает координаты, куда движется пешка.
Выводим информацию какой индекс массива выбран и координаты, куда движется пешка.
Необходимые переменные в наличии. FormatText позволяет отформатировать сообщение для вывода в одну строку. Все строки выводятся в левом верхнем углу и сгорают за 20 секунд. Из интересного, здесь есть несколько нодов для преобразования значений одного типа в другой. Выше была обработка ошибки при выполнении Is Valid, там строка выводится красным цветом и “живет” 50 секунд, чтобы было заметно.
Считаю, что в нынешнем состоянии все стало более понятнее и нагляднее. Но, задача по системе навигации не закрыта, следите за новостями.