0Pricing
Lua Academy · レッスン

ステートマシンによるAIの振る舞い

FSMベースの敵AIロジックをすべてLuaスクリプトで実装します。

「ステートマシンによるAIの振る舞い」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

有限状態機械とは

有限状態機械(FSM)は、条件やイベントによって引き起こされる状態間の遷移を使って、振る舞いを定義します。

FSMのテーブル構造

FSMは、現在の状態、状態テーブル、および状態ごとの任意のenter/exit/updateコールバックを持つテーブルとして表現します。

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の遷移を設定ファイルから読み込むデータテーブルとして定義します。これにより、コードに触れずにデザイナーがAIを調整できます。

local transitions = {
  idle  = {seeEnemy = "chase"},
  chase = {lostEnemy = "idle", nearEnemy = "attack"},
  attack = {enemyDead = "idle"},
}

スタック型ステートマシン

状態スタックを使うと、一時的な状態(例:"stunned")を現在の状態の上に積み、終了後に元の状態へ戻せます。

複数のAIエージェント

各敵エンティティは独自のFSMインスタンスを持つため、AIはそれぞれ独立して動作します。Luaのテーブルとクロージャを使えば簡単に実現できます。

FSMのデバッグ

開発中はすべての遷移をログに記録します。トレーステーブルに{from, to, time}を保存すると、AIの動作を事後分析できます。

FSMの質問

FSMで状態遷移を引き起こすものは何ですか。

復習:ステートマシンによるAI

LuaのFSMでは、状態オブジェクト(enter/update/exit)のテーブルと遷移関数を使います。AIの関心事を明確に分離でき、データ駆動設計にも対応し、単純な敵のAIから複雑な階層型の振る舞いツリーまで拡張できます。

よくある質問

「ステートマシンによるAIの振る舞い」レッスンは無料ですか?

はい。「ステートマシンによるAIの振る舞い」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「ステートマシンによるAIの振る舞い」で何を学びますか?

FSMベースの敵AIロジックをすべてLuaスクリプトで実装します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ステートマシンによるAIの振る舞い」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Luaのイベントシステム
  2. コンポーネントベースのスクリプト
  3. ステートマシンによるAIの振る舞い
  4. データ駆動型設定とホットリロード
← Lua Academyに戻る