Pull to refresh

Unreal Engine 4 — как устроенна навигация в NavMeshBoundsVolume

Всем доброго времени суток. Меня зовут Александр Сироткин сейчас моя задача овладеть всеми тонкостями программирования на игровом движке Unreal Engine 4.

Возникла задача написать NPC или ИИ и при этом соответственно, каждый персонаж должен передвигаться на своей собственной территории в случайную точку. Конечно идей реализации масса, можно устанавливать TargetPoint вокруг него брать радиус, сравнивать координаты случайной точки с данным радиусом. Но нет, меня именно заинтересовала тема навигации по NavMeshBoundsVolume. Во первых если во вкладке Show включить Navigation то мы наглядно будем видеть область в которой может передвигаться наш npc и так же области в которую npc не будет случайно заходить.

Зададим на нашей карте 2 места взяв из вкладки Modes стандартную навигацию NavMeshBoundsVolume.



Следующим шагом, что бы задать случайное место в которое нужно двигаться создадим в нашем npc переменную типа RacastNavMesh, почему именно данный тип нас интересует? А все очень просто, наш npc двигается не по NavMeshBoundsVolume как можно было бы подумать. Здесь логика следующая, после того как вы на локацию перенесли NavMeshBoundsVolume и отредактировали границы локации передвижения для npc, в World Outliner создается дополнительный элемент на карте RecastNavMesh-Default типа RacastNavMesh. Так вот именно данный инструмент позволяет понять нашему npc куда нужно двигаться, то есть он перемещается не по NavMeshBoundsVolume, здесь NavMeshBoundsVolume служит инструментом для создания зоны перемещения RecastNavMesh-Default. Если удалить с карты данный элемент то NavMeshBoundsVolume останутся на карте, а зона передвижения для Npc исчезнет.



Для генерации данной зоны нужно взять NavMeshBoundsVolume и отредактировать его границы или просто чуть чуть сдвинуть вверх (вниз, влево или вправо).



Редактируем второй NavMeshBoundsVolume



Важно! На карте создается только один RecastNavMesh-Default то есть здесь не создается под каждый NavMeshBoundsVolume свой RacastNavMesh.

Далее помещаем npc в NavMeshBoundsVolume и прописываем алгоритм поиска случайной точки.



На выходе получаем что наш npc будет искать случайную точку в NavMeshBoundsVolume в котором он находится.

1. NavMeshBoundsVolume



2. NavMeshBoundsVolume



Не могу сказать что это действительно самый лучший способ для разделения области навигации, здесь моя задача показаться именно сам инструмент NavMeshBoundsVolume, а как действительно сделать навигацию для своих npc уже решать вам. Удачи!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.