MENU

敵キャラのAI設計で使える簡単な状態遷移モデル(FSM)とは?

敵キャラのAI設計で使える簡単な状態遷移モデル(FSM)とは?

「敵キャラに動きをつけたいけど、どうやって実装すればいいかわからない」
そんな初心者におすすめなのが、状態遷移モデル(Finite State Machine:FSM)を使ったAI設計です。

FSMはシンプルで分かりやすく、個人開発でも取り入れやすい方法のひとつ。
この記事では、FSMの基礎と、ゲームAIへの具体的な活用例を紹介します。


目次

FSM(有限状態機械)とは?

FSMとは、ある「状態(State)」に応じて異なる処理を行い、条件に応じて次の状態に移るという仕組みです。

簡単に言えば、「今、何をしているか」を明確に管理する方法です。


ゲームにおけるFSMの基本構造

例えば敵キャラが以下のような行動を取るとします:

  1. プレイヤーを探す(巡回)
  2. プレイヤーを見つけたら追いかける
  3. 一定距離に近づいたら攻撃する
  4. ダメージを受けたら怯む
  5. HPが0になったら倒れる

これらを状態として定義し、それぞれの**条件(トリガー)**で状態を遷移させます。


状態と遷移の例(簡易版)

状態次の状態への条件
巡回(Patrol)プレイヤーを視認したら → 追跡へ
追跡(Chase)プレイヤーに近づいたら → 攻撃へ
攻撃(Attack)攻撃後 → 再び追跡へ or 巡回へ
怯み(Stagger)一定時間経過 → 元の状態へ戻る
倒れる(Dead)HPが0以下 → 状態固定(終了)

実装イメージ(擬似コード)

pythonコピーする編集するif state == "Patrol":
    move_along_route()
    if can_see_player():
        state = "Chase"

elif state == "Chase":
    chase_player()
    if is_close_to_player():
        state = "Attack"
    elif lost_sight_of_player():
        state = "Patrol"

elif state == "Attack":
    perform_attack()
    if attack_finished():
        state = "Chase"

elif state == "Stagger":
    if stagger_timer <= 0:
        state = "Chase"

elif state == "Dead":
    stop_all_actions()

このように、状態ごとの処理を明確に分けることで、動きが理解しやすく、バグも出にくくなります。


FSMを使うメリット

  • 状態ごとに処理を整理できるため、コードが見やすくなる
  • 条件が明確なので、デバッグや調整がしやすい
  • キャラごとに異なるAIを簡単に作り分けられる
  • 状態管理が明快なので、新しい動作の追加がしやすい

よくあるパターンと応用

タレット型(その場で攻撃)

  • Idle → Detect → Shoot → Cooldown → Idle

近接型(近づいて殴る)

  • Patrol → Chase → Attack → Chase

遠距離型(距離を取りながら攻撃)

  • Patrol → Chase → Attack → Retreat → Chase

このように、FSMを応用すればさまざまな行動パターンが作れます。


FSM設計時の注意点

  • 状態が増えすぎると逆に複雑になる → グループ化やサブFSMを活用
  • 条件があいまいだと意図しない挙動に → トリガーの判定は明確に
  • 状態の“途中”で他の状態に移る場合の中断処理を忘れずに

まとめ:FSMは「シンプルで強力なAI設計ツール」

ポイント内容
状態を分ける行動ごとに明確な状態を定義する
条件で切り替えトリガーに応じて状態遷移する
見通しが良いAIの処理が分かりやすく、管理しやすい
拡張しやすい新しい状態や動作も追加しやすい

FSMは、複雑なAIを直感的に整理できる便利な仕組みです。
個人開発でも、敵の挙動に「動きの幅」と「賢さ」を持たせたいときに非常に役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次