Полезное

Мы Вконтакте

Discord канал

#
Модератор: Di-Crash
Аватара пользователя
Пользователь
Сообщения: 2
Добрый день. Работаю на стратегической игрой и необходимо реализовать поиск пути на карте через Navigation Mesh с учетом зон проходимости.
Предполагается 3 типа юнитов:
1. танки - ездят только по земле и не ездят по воде
2. корабли - ходят только по воде
3. амфибии - ездят по земле с нормальной скоростью и могут по воде с в 2 раза меньшей скоростью.
Карта представляет из себя землю, на которой отмечены зоны воды для кораблей.

Изображение

желтая линия это то как мне хотелось бы чтобы юниты двигались к цели.

Подобная проблема и её решение уже описывалось тут: https://answers.unrealengine.com/questions/106727/how-to-make-character-navigate-around-navmodifiers.html и я стал делать подобным образом. Создал NavArea для региона воды (обозвал NavModWaterOnly) а так же создал Navigation Query Filter ( обозвал QueryFilterWater) в нем указал мои NavArea для воды

Изображение

Далее добавил на сцену EmptyCharacter и ему добавил компонент NavModifier в котором указал принадлежность региону воды

Изображение

ну и далее в блупринте дал команду идти к цели

Изображение

в итоге юниты игнорируют регион воды и идут также как будто его нет, стены конечно обходят.
Полагаю, что проблема в блупринте, вероятно нужно не просто отправлять прямой наводкой а с учетом нашего фильтра, но я сам не могу допереть как и что дальше мне делать. Так что прошу о помощи сообщество. Спасибо
Аватара пользователя
Пользователь
Сообщения: 216
Собственно проделав полностью шаги от nonder'а, все получилось, единственная проблема которая у меня возникла это приделка фильтра к Move to location. Убрав галочку Content sensitive нашёл необходимую функцию, она работает не с Controller, а с AIController. На скрине рабочий BP. Если надо подробнее - распишу, щас с работы валю и не успею все расписать как надо.
Изображение
_________________
Активные темы форума
Аватара пользователя
Пользователь
Сообщения: 2
Сделал BP подобно твоему, не сработало, юнит также игнорирует регионы. Можешь подробнее расписать ключевые моменты?
Аватара пользователя
Пользователь
Сообщения: 216
1. Делаешь новый BP из класса NavArea, назови его NavArea_Water. Измени цвет и затраты прохождения, если нужно.
2. Делаешь новый BP из класса NavigationQueryFilter, назови его NavQueryFilter_Tank.
3. Открываешь NavQueryFilter_Tank и добавляешь туда 3 Area: NavArea_Default, NavArea_Null и свою NavArea_Water. На NavArea_Null и NavArea_Water ставишь Is Excluded.
4. Теперь, если ты до этого не обозначал никак область воды, кидаешь на карту NavModifier и выставляешь свойствах Area Class свой NavArea_Water (область сменит цвет, если ты его менял).
5. Делаешь граф как у меня постом выше, в Filter Class выставляешь NavQueryFilter_Tank.
6. Проверяешь.
_________________
Активные темы форума
Аватара пользователя
Пользователь
Сообщения: 216
Для объектов которые должны наоборот - только плавать по нашей зоне надо:
1. Сменить галочки в нашем NavQuery: оставить без галочки только NavArea_Water
2. Идём в свойства проекта и делаем следующее:
-> Navigation System
-> Добавить(если нет) Agent
-> Увеличить значение Default Query Extend (я сделал по 500)
Теперь ваш объект не будет останавливаться у края области проходимости на прямой видимости вашей координаты, а пойдёт в точку на границе области проходимости, ближайшую к вашей координате.

P.S. Решение затыка было найдено на answerhub'е и принято на веру. Если кто знает, где прочитать про этот параметр, - буду признателен за ссылку, у меня найти не получилось.
_________________
Активные темы форума


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 118

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница