Fly On: Из горна

Fly On: Из горна Космос, Разработка, Компьютерные игры, Unity

Доброго времени суток! Сегодня я расскажу немного о искусственном интелекте компьютерных пилотов.

Необходимость более продвинутой логики действий компьютера была выявлена еще при создании первой боевой сцены в игре. Главной причиной оказались боевые задания, например уничтожить определенный объект для достижения победы. С базовой логикой (найти ближайшего врага -> уничтожить -> повторить), для простых битв на уничтожение такая логика прекрасно подходит, но для операций с конкретным заданием далека от идеала. Компьютер конечно мог в какой то момент обратить внимание и на цель задания, но она явно не является приоритетной.


Как я это сделал. Сперва я подумывал об ии как какой то универсальной сущности которая каким то образом сама принимает адекватные решения оценивая окружение. Но вот как именно у меня не было не малейшего понятия. Тогда я стал проводить оценку, что именно должны уметь компьютеры. И тут я в полной мере осознал, что они должны выполнять поставленные "командованием" задачи. Отлично, значит и логика должна зависеть от этих задач. Таким образом для каждой цели я решил разрабатывать собственное адекватное поведение. Однако если ии сосредоточится на задании тогда ему будет совершенно не важно что происходит вокруг. Решением этой проблемы стало разделение поведения компьютера на две категории: индивидуальное и командное.


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


Командное поведение это цель команды в битве, то за что вы сражайтесь. Это поведение разделяется еще на 2 подкатегории: действие и противодействие. Действие предназначается для своей команды и обеспечивает выполнение цели. Противодействие соответственно наоборот предназначено для команды противника и мешает выполнению цели.


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


На данный момент я так распределил весы классам кораблей: легкий - агрессивно настроен, нападает на всех вокруг, не сильно стремится выполнить задание; средний - эммм... Средний, но более настроен на предотвращение выполнения задач противником; тяжелый - большой уровень самоотверженности, стремится выполнять задачи.


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