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

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

15 ответов

23 просмотра

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
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
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Карта сайта