0Pricing
Lua Academy · Урок

Поведение искусственного интеллекта с помощью автоматов состояний

Реализуйте логику искусственного интеллекта противников на основе 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 — локальная установка не требуется.

Все уроки этого курса

  1. Системы событий в Lua
  2. Скриптинг на основе компонентов
  3. Поведение искусственного интеллекта с помощью автоматов состояний
  4. Конфигурация на основе данных и горячая перезагрузка
← Назад к Lua Academy