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

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

15 ответов

25 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта