Пишем ИИ для игры. Часть 1: Как найти противников в поле зрения

Всем привет. С сегодняшнего дня я решил начать написание цикла статей по работе с ИИ противника. В ходе данного цикла я хочу показать на простых примерах, как можно сделать ИИ в игре, который будет учитывать поле зрения противника, уровень издаваемого шума, умеет патрулировать местность, ставить приоритетные цели и обладать различными типами поведе…

Field of View
3333

Интерфейс IFOV выполняет несколько задач. Там пробел в одну строку как раз там где следует его порезать на два разных интерфейса. Тот что является Fov реализацией и тот что отвечает за поиск целей в реализаций.
Есть версия overlap sphere non alloc. Текущаягенерит каждый раз новый лист, даже если он ре нужен. Еще, не уверен до конца, но вроде бы вызов этих методов следует в FixedUpdate засунуть, но это не точно.
IsSeeTarget просто не нужен - добавляй в список и все. Код чище будет.
Не нравится проверка на попадание в угол зрения - normalized - высчитывает корень квадратный, лучше бы этого избежать.
GetNearestTarget делает расчеты при каждом вызове. Следует хранить таргеты в отсортированном по дистанции виде и просто возвращать первый.

3
Ответить

Со всем согласен, кроме GetNearestTarget. Позиция ближайшего может измениться на следующий вызов метода, так что его следует пересчитать. В целом это просто на понимание как это работает, код естественно написан за 5 минут без всякой оптимизации

1
Ответить