когда бот может бить игрока (когда бот добежал до игрока и находится в радиусе удара)? Приходится использовать много вычислений на тик бота. Но может вариант получше есть?
Я раньше использовал один из двух вариантов, ни один мне не нравится:
1) если бот в бою, то каждый тик проверять дистанцию между ботом и игроком и если она меньше определенного значения, то показывать монтаж атаки
2) добавить оверлап-компонент на Pawn бота. И на оверлап-событие поставить сравнение с текущей целью бота. Если цели равны, то можно включать анимацию атаки
Можно и так и так, если боты по производительности (cpu time) не ограничены, что бывает часто во многих играх. Выбирай по простоте/удобству. Если уперся в производительность, то что-то одно будет оптимальнее, но это зависит от жанра/механик.
Проблема именно в производительности. Это довольно частая задача для игр и мне все время кажется, что должен быть нормальный оптимальный вариант. Но во всех гайдах довольно неэффективно это сделано
Ты измерил что проблема в этом?
Это очень напоминает проблему просчёта коллизии между большим количеством объектов на карте. Обычно делят по одной или даже двум сеткам и проверяют объекты, которые попали в один квадрат. Таким образом ты не будешь проверять дальность атаки между ботом и игроком на разных концах карты. Ещё советую проверять не дальность, а дальность в квадрате, потому что при вычислениях с векторами ты сперва получаешь дальность в квадрате.
Ну конечно, я спавнил более 60 ботов в режиме тика просчитывающих дистанцию до игрока. И конечно фпс падал жестко. Но вы представьте, что вы делаете стратегию типа старкрафт, где 100 ботов идут на 100 ботов и каждый имеет свою дальность атаки. И каждый должен считать дистанцию для атаки постоянно. Никак не могу понять как лучше это сделать
А ты уверен, что проблема падения фпс именно в этих просчетах?
посчитать дистанцию не проблема, а проблема обработать коллизию при движении
Про дальность в квадрате вполне здравая привычка, конечно. Хотя на практике подобное взаимодействие ботов обычно упирается либо в обход всех актеров одного типа, либо в запросы к физическому движку (которые далеко не бесплатные). Стоимость арифметики потеряется в ошибках округления.
Зачем считать дистанцию если есть триггер сфера?
Ну вот с триггер сферой получше мб вариант. Но на 200 мобов добавлять триггер сферы… мне не кажется, что это идеальный вариант. Да и он не подходит для мобов, которые стреляют издалека
Ага, а затем оказывается что апдейт трансформа сцен компонента выходит дороже, чем посчитать расстояние :D
Почему не подходит увеличь ее на радиус, который нужен для атаки?
60 ботов - не очень много. В Фортнайте вроде они озвучивали 100 на одной карте на мобилках, причем с анимированным оружием. Возможно, у твоих ботов что-то очевидно неоптимальное есть. Блюпринты в тике, дорогая анимация, плохие ЛОДы или еще что-то в этом роде. Профилировать конечно надо такие вещи подробно. Иначе в механиках взаимодействия случится premature optimization, как оно часто и бывает.
Это все вакуум в вакууме. Нужно брать билд, собирать трейс и принимать решения исходя из реальной картины и железа. А так это просто пустой треп
Это не ваккум. Вот ваккум)
Обсуждают сегодня