Поведение искусственного интеллекта с помощью автоматов состояний
Реализуйте логику искусственного интеллекта противников на основе FSM исключительно в скриптах Lua.
«Поведение искусственного интеллекта с помощью автоматов состояний» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Что такое конечный автомат
Конечный автомат (FSM) описывает поведение как набор состояний с переходами между ними, которые запускаются условиями или событиями.
Структура таблицы FSM
Представьте FSM в виде таблицы с текущим состоянием, таблицей состояний и необязательными обратными вызовами входа, выхода и обновления для каждого состояния.
local function newFSM(initialState)
return {
current = initialState,
states = {},
}
endОпределение состояний
Каждое состояние — это таблица с необязательными функциями enter, update и exit.
local fsm = newFSM("idle")
fsm.states.idle = {
enter = function(self) print("Enter idle") end,
update = function(self, dt)
if self.enemy then self:transition("chase") end
end,
exit = function(self) print("Exit idle") end
}Добавление состояния преследования
Состояние преследования направляется к игроку и переходит в состояние атаки, когда расстояние становится достаточно малым.
fsm.states.chase = {
enter = function(self) print("Chasing!") end,
update = function(self, dt)
if self.distToPlayer < 2 then
self:transition("attack")
elseif not self.enemy then
self:transition("idle")
end
end
}Функция перехода
Переход вызывает exit у текущего состояния, меняет состояние, а затем вызывает enter у нового состояния.
function fsm:transition(newState)
local cur = self.states[self.current]
if cur and cur.exit then cur:exit() end
self.current = newState
local next = self.states[newState]
if next and next.enter then next:enter() end
endОбновление FSM
На каждом игровом такте вызывайте fsm:update(dt), чтобы выполнить логику обновления текущего состояния.
function fsm:update(dt)
local state = self.states[self.current]
if state and state.update then
state:update(dt)
end
endИерархические конечные автоматы
Состояния могут содержать вложенные FSM. Родительское состояние обрабатывает общую логику, например бой или патрулирование, а дочерние FSM — детали внутри каждого родительского состояния.
FSM, управляемые данными
Определяйте переходы FSM в виде таблиц данных, загружаемых из файлов конфигурации. Это позволяет разработчикам настраивать ИИ, не изменяя код.
local transitions = {
idle = {seeEnemy = "chase"},
chase = {lostEnemy = "idle", nearEnemy = "attack"},
attack = {enemyDead = "idle"},
}Стековые конечные автоматы
Стек состояний позволяет временным состояниям, например «оглушён», помещаться поверх текущего состояния и возобновлять его после завершения.
Несколько агентов ИИ
У каждой сущности-врага есть собственный экземпляр FSM, поэтому их ИИ работает независимо. В Lua это легко реализовать с помощью таблиц и замыканий.
Отладка FSM
Во время разработки записывайте все переходы. В таблице трассировки сохраняются {from, to, time} для последующего анализа поведения ИИ.
Вопрос о FSM
Что запускает переход состояния в FSM?
Итоги: ИИ с конечными автоматами
FSM в Lua используют таблицу объектов состояний (enter/update/exit) и функцию перехода. Они чётко разделяют задачи ИИ, поддерживают проектирование на основе данных и масштабируются от простого поведения врагов до сложных иерархических деревьев поведения.
Часто задаваемые вопросы
Урок «Поведение искусственного интеллекта с помощью автоматов состояний» бесплатный?
Да — полный текст урока «Поведение искусственного интеллекта с помощью автоматов состояний» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Поведение искусственного интеллекта с помощью автоматов состояний»?
Реализуйте логику искусственного интеллекта противников на основе FSM исключительно в скриптах Lua. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Поведение искусственного интеллекта с помощью автоматов состояний»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Системы событий в Lua
- Скриптинг на основе компонентов
- Поведение искусственного интеллекта с помощью автоматов состояний
- Конфигурация на основе данных и горячая перезагрузка