Привет. А можно поинтересоваться, как обычно вы решаете проблему определения,

когда бот может бить игрока (когда бот добежал до игрока и находится в радиусе удара)? Приходится использовать много вычислений на тик бота. Но может вариант получше есть?
Я раньше использовал один из двух вариантов, ни один мне не нравится:
1) если бот в бою, то каждый тик проверять дистанцию между ботом и игроком и если она меньше определенного значения, то показывать монтаж атаки
2) добавить оверлап-компонент на Pawn бота. И на оверлап-событие поставить сравнение с текущей целью бота. Если цели равны, то можно включать анимацию атаки

15 ответов

10 просмотров

Можно и так и так, если боты по производительности (cpu time) не ограничены, что бывает часто во многих играх. Выбирай по простоте/удобству. Если уперся в производительность, то что-то одно будет оптимальнее, но это зависит от жанра/механик.

Евгений-Анатольев Автор вопроса
Михаил Никонов
Можно и так и так, если боты по производительности...

Проблема именно в производительности. Это довольно частая задача для игр и мне все время кажется, что должен быть нормальный оптимальный вариант. Но во всех гайдах довольно неэффективно это сделано

Ты измерил что проблема в этом?

Это очень напоминает проблему просчёта коллизии между большим количеством объектов на карте. Обычно делят по одной или даже двум сеткам и проверяют объекты, которые попали в один квадрат. Таким образом ты не будешь проверять дальность атаки между ботом и игроком на разных концах карты. Ещё советую проверять не дальность, а дальность в квадрате, потому что при вычислениях с векторами ты сперва получаешь дальность в квадрате.

Евгений-Анатольев Автор вопроса
Vladimir Alyamkin
Ты измерил что проблема в этом?

Ну конечно, я спавнил более 60 ботов в режиме тика просчитывающих дистанцию до игрока. И конечно фпс падал жестко. Но вы представьте, что вы делаете стратегию типа старкрафт, где 100 ботов идут на 100 ботов и каждый имеет свою дальность атаки. И каждый должен считать дистанцию для атаки постоянно. Никак не могу понять как лучше это сделать

Евгений Анатольев
Ну конечно, я спавнил более 60 ботов в режиме тика...

А ты уверен, что проблема падения фпс именно в этих просчетах?

Евгений Анатольев
Ну конечно, я спавнил более 60 ботов в режиме тика...

посчитать дистанцию не проблема, а проблема обработать коллизию при движении

𝑨𝒍𝒆𝒙𝒂𝒏𝒅𝒆𝒓
Это очень напоминает проблему просчёта коллизии ме...

Про дальность в квадрате вполне здравая привычка, конечно. Хотя на практике подобное взаимодействие ботов обычно упирается либо в обход всех актеров одного типа, либо в запросы к физическому движку (которые далеко не бесплатные). Стоимость арифметики потеряется в ошибках округления.

Евгений Анатольев
Ну конечно, я спавнил более 60 ботов в режиме тика...

Зачем считать дистанцию если есть триггер сфера?

Евгений-Анатольев Автор вопроса
Aleksandr
Зачем считать дистанцию если есть триггер сфера?

Ну вот с триггер сферой получше мб вариант. Но на 200 мобов добавлять триггер сферы… мне не кажется, что это идеальный вариант. Да и он не подходит для мобов, которые стреляют издалека

Aleksandr
Зачем считать дистанцию если есть триггер сфера?

Ага, а затем оказывается что апдейт трансформа сцен компонента выходит дороже, чем посчитать расстояние :D

Евгений Анатольев
Ну вот с триггер сферой получше мб вариант. Но на ...

Почему не подходит увеличь ее на радиус, который нужен для атаки?

Евгений Анатольев
Ну конечно, я спавнил более 60 ботов в режиме тика...

60 ботов - не очень много. В Фортнайте вроде они озвучивали 100 на одной карте на мобилках, причем с анимированным оружием. Возможно, у твоих ботов что-то очевидно неоптимальное есть. Блюпринты в тике, дорогая анимация, плохие ЛОДы или еще что-то в этом роде. Профилировать конечно надо такие вещи подробно. Иначе в механиках взаимодействия случится premature optimization, как оно часто и бывает.

Евгений Анатольев
Ну вот с триггер сферой получше мб вариант. Но на ...

Это все вакуум в вакууме. Нужно брать билд, собирать трейс и принимать решения исходя из реальной картины и железа. А так это просто пустой треп

Похожие вопросы

Обсуждают сегодня

Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Чет мне ссыкотно опять Rainlab.User в проект ставить. Кто знает, опять наотъебись все сделали или после обнов пользоваться можно?
Black Cat
10
ребят, привет есть ли возможность мигрировать Policies + Auth Methods из нескольких Vault в один? пытаюсь сократить Vault кластера, немного не удобно что для каждой тестовой ...
azadevlab
2
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
Всем привет. Кто подскажет, как сделать авто обновление стороннего модуля при запуске контейнера. Мб есть команда при запуске контенера или в докер файле нужно приписать настр...
Trum_t Malyuzhenets
1
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
это группа токсиков или тех кто помогает?
Ибрагим
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
Карта сайта