
Почему if/else убивает ИИ врагов в Unity и как от этого уйти
badcasedaily1 8 минут назад Почему if/else убивает ИИ врагов в Unity и как от этого уйти Средний 10 мин 109 Блог компании OTUS Unity * Разработка игр * C# * Туториал Каждый, кто делал ИИ для врагов в Unity, начинал...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. badcasedaily1 8 минут назад Почему if/else убивает ИИ врагов в Unity и как от этого уйти Средний 10 мин 109 Блог компании OTUS Unity * Разработка игр * C# * Туториал Каждый, кто делал ИИ для врагов в Unity, начинал одинаково. Враг стоит на точке, видит игрока — бежит к нему, подбегает — бьёт, здоровье мало — убегает. Пять условий, двадцать строк, всё работает.
Через неделю гейм-дизайнер просит добавить патрулирование. Ещё через неделю — чтобы враг звал подкрепление. Ещё через неделю — второй тип врага, который стреляет издалека.
Технические детали
И вот у вас уже 300 строк вложенных if-ов, которые не может прочитать даже тот, кто их написал, а каждое новое поведение ломает два старых. Как выглядит ИИ на if/else и почему он ломаетсяБазовый контроллер врага, который все писали:void Update() { if (health < 20) { Flee(); } else if (CanSeePlayer()) { if (DistanceToPlayer() < attackRange) { Attack(); } } }Пять веток, читается нормально. Теперь добавляем: прятаться за укрытие при здоровье ниже 50%, подбирать аптечку, отступать к союзникам, кидать гранату на расстоянии, переключаться в ближний бой вблизи, звать подкрепление, если один.
Каждое условие втыкается куда-то в середину цепочки. Через месяц враг иногда игнорирует игрока и бежит к аптечке при полном здоровье — одно условие перекрыло другое, и найти это в 300-строчном if/else тяжело. е конечный автомат) помогает отчасти: состояния явные (Patrol, Chase, Attack, Flee), переходы между ними тоже.
Но у FSM своя проблема — взрыв переходов. Пять состояний, каждое может перейти в каждое — 20 переходов. Десять состояний — 90.
Отраслевые последствия
На десяти состояниях граф превращается в клубок, на который больно смотреть, а добавление одиннадцатого состояния требует прописать до десяти новых переходов. HFSM (иерархический конечный автомат) облегчает ситуацию вложенными состояниями, но не решает фундаментальную проблему: каждый новый тип поведения требует ручного описания переходов ко всем остальным. Behaviour Tree: дерево решений вместо графа переходовBehaviour Tree (BT) подходит к задаче принципиально иначе.
Вместо «состояние + переходы» вы описываете дерево, которое обходится сверху вниз каждый тик. Дерево состоит из трёх типов узлов. Composite — узлы с детьми.
Два основных:Selector пробует детей по очереди, пока один не вернёт Success (как оператор OR). Если все дети вернули Failure, сам возвращает Failure. Sequence выполняет детей по очереди, пока все не вернут Success (как AND).
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





