スポンサーリンク
UnityUnityメモ

UnityでAIを実装!ビヘイビアツリーと状態マシンで賢いNPCを作る方法

Unity

🏁 はじめに

ゲームの中で、まるで自分で考えているように動く「敵キャラ」や「仲間NPC」を見たことがありますよね?
それを実現しているのが、AI(人工知能)です。Unityでも、スクリプトや専用ツールを使って“賢く動くキャラクター”を作ることができます。

AIと聞くと難しく感じるかもしれませんが、仕組みを分解すれば意外とシンプル。
基本となるのは「状態マシン(FSM:Finite State Machine)」と「ビヘイビアツリー(Behavior Tree)」の2つです。

状態マシンは、キャラが今どんな状態なのかを管理するための仕組み。
たとえば「巡回中 → 敵を発見 → 追跡中 → 攻撃中 → 逃走中」といった行動を整理してくれます。
一方で、ビヘイビアツリーは木の枝のような構造で、AIの“思考の流れ”を整理する方法です。
この2つをうまく組み合わせることで、自然でリアルなNPCの行動が実現できます。


1. 状態マシン(FSM)の基本とUnity実装手順

まずはAIの基礎となる「状態マシン(State Machine / FSM)」から見ていきましょう。
状態マシンとは、キャラクターが持つ「行動状態」を定義し、その状態を条件に応じて切り替える仕組みのことです。

たとえば、敵キャラの行動を考えるとこんな感じです👇

  • 巡回中(Patrol)
  • プレイヤーを発見!(Alert)
  • 追跡中(Chase)
  • 攻撃中(Attack)
  • 逃走中(Flee)

このように、状態マシンは「状態」と「遷移(Transition)」をセットで管理することで、キャラクターの思考をシンプルに整理できます。
Unityでは、アニメーション制御にも同じ考え方(Animator Controllerのステートマシン)が使われています。

🧩 状態マシンの特徴

  • 処理が明確で管理しやすい:どの状態で何をしているのかがひと目で分かります。
  • 軽量で動作が安定:小規模なAIやシンプルな敵キャラに最適です。
  • デメリット:状態数が増えると遷移が複雑になり、管理が大変になります。

小規模なAIではFSMだけでも十分ですが、行動パターンが増えてきたら、次に紹介するビヘイビアツリー(Behavior Tree)を組み合わせると便利です。

🛠 Unityでの実装手順

  1. 状態を定義する
    public enum EnemyState { Patrol, Alert, Chase, Attack, Flee }
    こんなふうに列挙型(enum)を使って状態名を定義します。
  2. スクリプトを作成する
    プロジェクトウィンドウで右クリック → 「Create」→「C# Script」を選択し、EnemyAIと名付けましょう。
    このスクリプトで現在の状態(currentState)を管理します。
  3. 状態ごとの処理を書く
    Update()内で switch (currentState) を使い、各状態に応じた関数を呼び出します。
    条件を満たしたら currentState を次の状態へ切り替えます。
  4. スクリプトを敵キャラにアタッチ
    作成したスクリプトを敵キャラクターにドラッグ&ドロップでアタッチし、
    インスペクターからプレイヤーのTransformなどを設定します。

// 簡単な例
using UnityEngine;

public class EnemyAI : MonoBehaviour
{
    public enum EnemyState { Patrol, Alert, Chase, Attack, Flee }
    public EnemyState currentState = EnemyState.Patrol;
    public Transform player;

    void Update()
    {
        switch (currentState)
        {
            case EnemyState.Patrol:
                Patrol();
                break;
            case EnemyState.Chase:
                Chase();
                break;
            case EnemyState.Attack:
                Attack();
                break;
        }
    }

    void Patrol()
    {
        // 巡回中の動作
        Debug.Log("巡回中...");
        // プレイヤーを発見したら状態変更
        if (Vector3.Distance(transform.position, player.position) < 5f)
            currentState = EnemyState.Chase;
    }

    void Chase()
    {
        Debug.Log("追跡中...");
        transform.position = Vector3.MoveTowards(transform.position, player.position, Time.deltaTime * 2f);
        if (Vector3.Distance(transform.position, player.position) < 1.5f)
            currentState = EnemyState.Attack;
    }

    void Attack()
    {
        Debug.Log("攻撃中!");
    }
}

このように、状態マシンを使うと「今なにをしているか」を明確に分けて制御できるため、バグの原因を減らせます。
特にアクションゲームやステルス系の敵AIなどにぴったりです。

もっと柔軟に管理したい場合は、状態ごとにクラスを分ける「ステートパターン」を使うのもおすすめです。
また、次に紹介するビヘイビアツリーと組み合わせることで、さらに自然なAIを構築できます。

📚理論をしっかり理解したい方はこちらの書籍もおすすめです👇

ゲームAI技術入門──広大な人工知能の世界を体系的に学ぶ

Amazonでチェックする|✅ 楽天でチェックする

次は、もう少し複雑なAIを実現できる「ビヘイビアツリー(Behavior Tree)」を見ていきましょう🌿


2. ビヘイビアツリー(Behavior Tree)の仕組みとUnityでの構築方法

状態マシン(FSM)に慣れてきたら、次のステップとしておすすめなのが「ビヘイビアツリー(Behavior Tree)」です。
ビヘイビアツリーは、NPCの行動を木構造(ツリー構造)で整理する考え方で、より複雑なAIの判断をわかりやすく制御できます。

たとえば、「敵を見つけたら追跡 → 攻撃 → 見失ったら巡回に戻る」といった一連の動作を、ツリーの枝のように順番づけて表現します。
状態マシンよりも柔軟で、条件分岐や再試行処理をスマートに管理できるのが特徴です。

🌿 ビヘイビアツリーの基本構造

  • ルートノード(Root):AIのエントリーポイント。ここから処理が始まります。
  • コンポジットノード(Composite):処理の流れを制御するノードです。
    • Selector(選択ノード)…子ノードを順番にチェックして、最初に成功したものを採用。
    • Sequence(シーケンスノード)…全ての子ノードを順番に実行。途中で失敗すると終了。
  • デコレーターノード(Decorator):子ノードの動作を修正したり、繰り返し実行を制御します。
  • リーフノード(Leaf):実際の行動を記述する部分。
    • Action(アクションノード)…攻撃・移動などの具体的な行動を実行。
    • Condition(条件ノード)…「敵が見える?」「体力が少ない?」などの判断を行います。

このようにツリー構造にすることで、「どの条件でどんな行動を取るか」を直感的に整理できます。
FSMでは状態が増えると複雑になりがちですが、BTなら行動の追加・変更がしやすいのがメリットです✨

🆚 状態マシンとの違い

比較項目状態マシン(FSM)ビヘイビアツリー(BT)
構造状態+遷移で構成ツリー構造で階層管理
記述方法明示的に遷移を記述条件分岐をノードで表現
メリットシンプルで軽量複雑なAIを整理しやすく拡張性が高い
おすすめ用途敵の単純な挙動戦闘AI・探索AIなど高度なNPC

🧩 Unityでの構築方法

Unityでビヘイビアツリーを実装するには、アセットストアのツールを活用するのが圧倒的に効率的です。
特に以下の2つは世界的にも人気の高いツールです👇

  • Behavior Designer Pro – DOTS対応:ビジュアルエディタでノードをドラッグ&ドロップするだけでAIを構築可能。
  • NodeCanvas:状態マシン(FSM)とビヘイビアツリーを1つのエディタで統合できる多機能ツール。

どちらもノードを「線でつなぐだけ」で思考フローを作成できるため、コードを書く必要がありません。
初心者でも感覚的にAIを設計できるので、開発スピードが大幅にアップします💡

🧠 簡単なビヘイビアツリー構築例

  1. シーンにNPCを配置
    Hierarchyで「右クリック → 3D Object → Capsule」を選び、NPCのモデルを作成します。
    「NavMeshAgent」をアタッチしておきましょう。
  2. Behavior Designerを導入
    アセットストアからインポート後、「Add Component」→「Behavior Tree」を追加します。
    インスペクターに「Behavior Tree Editor」が表示されます。
  3. ノードを追加して行動を設定
    Root → Selector → Sequence → Actionノードをつなげてみましょう。
    例:「敵が見える?」→「追跡する」→「攻撃する」
  4. 再生して確認
    再生ボタンを押すと、ツリーが上から下へ実行され、成功・失敗の結果がリアルタイムで確認できます。

このようにツリーを組み合わせるだけで、まるで自分で判断しているかのようなNPCを実現できます。
ゲームの規模が大きくなっても、ツリー構造ならメンテナンスがしやすいのも魅力です。

💡 プロが使う実践アセット

  • Emerald AI 2025:戦闘AIや仲間AIをコードなしで構築できるオールインワンAIシステム。
  • Odin Inspector & Serializer:インスペクターを拡張し、AIパラメータをリアルタイム調整できる便利ツール。

これらを組み合わせると、視覚的なAI設計+直感的なデバッグが可能になります。
実際にプロの開発現場でも、Behavior Designer + Odin Inspectorの組み合わせはよく使われています✨

次は、状態マシン(FSM)とビヘイビアツリー(BT)を組み合わせて、より自然で知的なNPCを作る方法を見ていきましょう!


3. FSM × BTのハイブリッドAIを作る

ここまでで「状態マシン(FSM)」と「ビヘイビアツリー(BT)」の特徴を学びましたね。
実はこの2つ、どちらか一方を使うだけでなく、組み合わせることでより自然で知的なNPCを作ることができます!

この構成は「ハイブリッドAI」と呼ばれ、AAAタイトルなどでもよく採用される手法です。
FSMでキャラの“モード(戦闘・逃走・探索など)”を管理し、BTで“具体的な行動パターン”を制御する形になります。

🎯 組み合わせの考え方

まず、FSMをAIの“全体的な流れ”として使い、ビヘイビアツリーをその中の“詳細な行動制御”として扱います。
これにより「巡回モード中はBTでパトロールルートを決定」「戦闘モードでは攻撃パターンを選択」といったように、AIが状況に応じて柔軟に行動できます。

構成イメージはこんな感じ👇


【FSM】
 ┣ 巡回モード
 ┃   ┗ Behavior Tree(パトロールルート選択)
 ┣ 戦闘モード
 ┃   ┗ Behavior Tree(攻撃・回避・追跡行動)
 ┗ 逃走モード
     ┗ Behavior Tree(安全エリア探索)

これにより、状態遷移はシンプルに保ちながら、行動の中身はツリーで細かく調整できます。
結果、AIの行動が“より人間的で自然”に見えるようになります✨

🧩 実装のステップ

  1. FSMでモードを定義する
    まずはステートマシンを使って大きなAIモードを定義します。
    例:「Patrol(巡回)」「Battle(戦闘)」「Flee(逃走)」など。
  2. BTで行動ノードを構築する
    Behavior Designer や NodeCanvas を使って、それぞれのモードに対応するビヘイビアツリーを作ります。
    • 巡回モード → Waypointを順に移動
    • 戦闘モード → 敵を発見 → 追跡 → 攻撃
    • 逃走モード → 一定距離まで離れたら安全エリアへ移動
  3. 状態遷移時にBTを切り替える
    FSMの状態が変わるたびに、現在のBTを差し替える構造にします。
    これにより、「戦闘モードに入ったら別のBTを読み込む」ような制御が可能になります。

FSMとBTを連動させることで、単純なAIが一気に“自分で考えて動いている”ように感じられます。
たとえば、プレイヤーが視界に入った瞬間に警戒し、攻撃後に逃げる…といった連続的な行動が自然に表現できます。

💡 実装のコツ

  • NavMeshAgentを活用して、移動経路を自動で処理。
  • Blackboard(ブラックボード)を使って、共通データ(プレイヤー位置・体力など)を管理。
  • 条件分岐ノードで「距離が〇m以内なら攻撃」などを設定。

このような設計を行うと、FSMは「モード管理の司令塔」として、BTは「行動AIの脳」として機能します。
それぞれの役割を分けることで、コードもツリーも整理されやすくなります🧠

⚙️ Unityで試してみよう

1. Plane(地面)を配置し、「Window → AI → Navigation」からNavMeshをベイクします。
2. Capsuleなどで敵キャラを作り、「NavMeshAgent」コンポーネントを追加。
3. Behavior Designerでツリーを組み、FSMスクリプト内でBTを制御する構造にします。
4. 再生して、NPCが「巡回 → 発見 → 追跡 → 攻撃」と自然に切り替わるか確認しましょう。

Behavior Designerをまだ持っていない方はこちらから👇

特にEmerald AI 2025は、戦闘AI・仲間AI・動物AIまで自動生成できる万能ツール。
FSM+BTの仕組みを内部で再現しており、複雑なAI構築を圧倒的に時短できます✨

🧠 コードとBTの連携イメージ


// 簡易構造イメージ
public class AIController : MonoBehaviour
{
    public enum Mode { Patrol, Battle, Flee }
    public Mode currentMode;
    public BehaviorTree patrolTree;
    public BehaviorTree battleTree;
    public BehaviorTree fleeTree;

    void Update()
    {
        switch (currentMode)
        {
            case Mode.Patrol:
                patrolTree.enabled = true;
                battleTree.enabled = false;
                break;
            case Mode.Battle:
                patrolTree.enabled = false;
                battleTree.enabled = true;
                break;
        }
    }
}

このように、FSMが「どのBTを有効化するか」を切り替えるだけで、AI全体の挙動をスマートに制御できます。
シンプルですが、拡張性が高く、実際のゲームAI設計にも使われる定番構成です。

次の章では、UnityのBehaviorパッケージを使って、よりビジュアルに追跡AIを構築する手順を紹介します🎮


4. Unity Behaviorパッケージを使った追跡AI構築

Unity 2023以降では、新しいBehaviorパッケージが追加され、AIの行動制御がより手軽に、そして視覚的に行えるようになりました。
この章では、そのBehaviorパッケージを使って「プレイヤーを追跡して攻撃する敵AI」を構築する手順を紹介します。

このシステムを使えば、ノードを組み合わせるだけで「パトロール → 発見 → 追跡 → 攻撃 → 再探索」といった流れを作ることができます。
しかも、コード量は最小限! GUIベースでAIを設計できるので、ビジュアルスクリプティングが得意な人にもおすすめです🌟

🧱 作るAIの仕様

  • ターゲットが見つからないときは「巡回(Patrol)」。
  • ターゲットを発見したら「追跡(Chase)」に切り替え。
  • 近づいたら「攻撃(Attack)」を実行。
  • 追跡が一定時間続いても追いつけなければ再び「巡回」に戻る。
  • ただし、ターゲットが視界内にいれば再追跡を継続する。

こうした動きを一からスクリプトで書くのは大変ですが、Behaviorパッケージなら「ノードをつなぐだけ」で実現できます✨

🧩 準備ステップ

  1. シーンをセットアップ
    Hierarchyウィンドウで右クリック → 「3D Object」→「Plane」を選択し、地面を作成します。
    その上にCapsuleを置いてNPCのモデルを作り、「NavMeshAgent」コンポーネントを追加します。
  2. NavMeshをベイク
    「Window」→「AI」→「Navigation」を開き、地面を選択して「Bake」タブからBakeをクリック。
    これでAIが歩き回れるマップが完成します。
  3. Behaviorパッケージを有効化
    「Window → Package Manager」を開き、「Behavior」を検索してインストールします。
    これで新しいBehavior Tree関連のノードが使えるようになります。

🌿 Behavior Treeでの構築手順

ここからは具体的なノード構成を見ていきましょう。

① パトロールの実装

  • 標準ノードの「Patrol」を使用します。
  • InspectorまたはBlackboardで「WayPoints」や「Speed」を設定。
  • Patrolは「Running」状態を維持するため、途中で中断させたい場合は「Abort」ノードを組み合わせます。

② ターゲット発見と行動切り替え

  • Check Distance」ノードでプレイヤー(Target)との距離を測定します。
  • 一定距離(例:4m)以内に入ったら、「Abort」でPatrolをキャンセルし、「Chase」ノードを実行します。
  • これらを「TryInOrder」(Selectorの一種)ノードでまとめると、行動の優先順位を簡単に管理できます。

③ モードの管理

  • BlackboardにEnum型の「EnemyMode」を作成し、「Patrol」「Battle」などの状態を定義します。
  • Switch」ノードを使って、モードによって異なるBT分岐を実行させます。
  • 距離や条件によって「EnemyMode」を切り替えることで、自然な遷移を表現できます。

④ 追跡と攻撃

  • Navigation To Target」ノードでターゲットの方向へ自動移動。
  • 距離が一定値(例:2m)以下になったら「LookAt」ノードでプレイヤーの方向を向きます。
  • 攻撃アニメーションを再生する場合は「PlayAnimationAction」ノードを作成。
    OnStartで再生し、完了後にSuccessを返すように設定します。

⑤ 追跡の中断とリカバリ

  • Timeout」ノードで追跡が長引いた場合に自動Abort。
  • Abort後は「Patrol」へ戻り、再び探索を開始します。
  • ただし、プレイヤーが視界内にいれば継続するよう、「Check Distance」や「Conditional Guard」ノードを併用します。

⑥ ターゲット検出の自動化

  • Find Target Modifier」ノードを使用し、Tag(例:”Player”)を持つオブジェクトを探索。
  • 角度や距離をBlackboard変数として設定することで、NPCが周囲を見渡しながらプレイヤーを見つけられるようになります。
  • NavMesh.Raycastを利用して、障害物越しの視認チェックも可能です。

🧠 チューニングのポイント

  • Abortノードで行動を中断するタイミングを調整すると、AIの“判断速度”をコントロールできます。
  • Blackboard上で数値(距離・角度・タイムアウト秒)を直接変更すれば、再ビルドせずに挙動を調整できます。
  • より直感的に設定したい人は、Odin Inspector & Serializerを導入するのもおすすめ!
    Behaviorツリー内のパラメータ編集が格段にラクになります✨

💡 さらに高度なAIを作りたい方へ

  • Emerald AI 2025:戦闘AI・仲間AI・ペットAIなど、複雑な行動をGUIで構築できる万能ツール。
  • Behavior Designer Pro:Behaviorパッケージを拡張できる最強の行動設計ツール。

特にEmerald AIは内部でFSMとBTの仕組みを併用しており、今回のような追跡AIをほぼノーコードで再現できます。
リアルな戦闘AIを作りたい人にはぜひチェックしてほしいアセットです🔥

次は、AIをさらに強化するための応用テクニックを紹介します。
NavMeshやML-Agentsを使って、NPCに「学習する知能」を持たせてみましょう!


5. 応用的なAIの作成

ここまでで、状態マシン(FSM)とビヘイビアツリー(BT)を使って、賢く動くNPCの作り方を学びました。
でも、AI開発の世界はまだまだ奥が深いんです…!
この章では、Unityでさらに高度なAIを作るための応用テクニックを紹介します🧠✨

🤖 1. NavMeshで移動を最適化する

AIキャラが「ただ追いかける」だけでなく、障害物を避けながら目的地に向かうようにしたい場合は、NavMeshを活用しましょう。
NavMeshAgentコンポーネントを利用することで、AIは自動的に最短ルートを選択して移動できます。

  • 地形や段差を考慮して自然なルート選択をしてくれる
  • プレイヤーが隠れても経路を再計算して追跡できる
  • FSMやBTと組み合わせることで、行動の「賢さ」が一気に向上!

特にビヘイビアツリーとNavMeshを連携させると、AIがまるで「考えて動いている」ような動きを再現できます。
このナビゲーション機能は、Unityに標準搭載されているので無料で使えます💡

🧭 2. ML-Agentsで学習するAIを作る

もし「AIがプレイヤーの行動を学習して強くなる」ようなシステムを作りたいなら、Unity公式のML-Agentsがおすすめ!
これは機械学習を使って、AIキャラクターに「報酬」を与えながら行動を学ばせる仕組みです。

  • プレイヤーの動きに合わせて戦術を変えるAIを作成可能
  • 強化学習・模倣学習に対応(TensorFlowベース)
  • FPS、格闘、レーシングなど多ジャンルで応用できる

ML-Agentsは少し上級者向けですが、BTやFSMの構造を理解していればスムーズに導入できます。
行動パターンをデータから学習させることで、「進化するNPC」も夢ではありません✨

👀 3. Sensor Toolkitで“感覚を持つ”AIにする

次に紹介するのは、AIに視覚・聴覚・距離感知を持たせられるツール「Sensor Toolkit 2」です。
これを使うと、敵AIが「音を立てたプレイヤーを発見」「光に反応して警戒」など、より人間的な反応を示すようになります。

  • 視界コーン、音波センサー、触覚トリガーなどを搭載
  • BTやFSMの条件ノードと組み合わせて使える
  • Emerald AIやBehavior Designerとも互換性あり

Sensor Toolkitを導入すれば、あなたのAIキャラはまるで「世界を感じ取っている」ように動き出します。
一度体験すると、もう単純なAIには戻れませんよ…!

🧩 4. AI構築を支えるおすすめアセットまとめ

ここまでのAI制作に役立つアセットを改めてまとめておきましょう👇

  • 🎮 Behavior Designer Pro:視覚的にビヘイビアツリーを構築できる最強AI設計ツール。
  • 🧠 NodeCanvas:FSMとBTのハイブリッド設計に最適。チーム開発にも強い!
  • 🐾 Emerald AI 2025:コード不要でプロレベルのNPC AIを作れる万能アセット。
  • 🧩 Odin Inspector & Serializer:AIのパラメータを直感的にデバッグ&調整できる強力ツール。

これらをうまく組み合わせれば、AI設計・思考・感覚・表現までを一貫して構築できます。
まさに“生きているNPC”を作るための最強セットです✨

📘 5. もっとAIを深く学びたい人へ

理論をしっかり理解したい方は、こちらの書籍もおすすめです👇

FSMやBTを体系的に理解できるだけでなく、強化学習やプランニングAIなどの最新手法にも触れられる一冊です📚

これで、あなたのNPCは「ただ動くだけの敵」ではなく、「考えて行動するキャラクター」へと進化します。


📝 まとめ

今回は、UnityでAIを実装するための2大手法「状態マシン(FSM)」と「ビヘイビアツリー(BT)」を中心に、AIを賢く制御する方法を紹介しました。
FSMで「行動モード」を管理し、BTで「具体的な思考と判断」を制御することで、NPCに人間らしい知能を持たせることができます。

さらに、Unity公式のBehaviorパッケージやアセットストアのツールを活用すれば、AI構築をビジュアルに、そして圧倒的に効率よく進められます。
アクション、RPG、サバイバル、どんなジャンルでも応用可能です!

🎮 今回紹介したおすすめアセット

これらを組み合わせれば、AIの設計から動作テストまで、すべてをUnityエディター内で完結できます✨
あなたのNPCが、プレイヤーの行動に反応して「考える」ようになる瞬間をぜひ体験してみてください。


🔗 あわせて読みたい


よくある質問(FAQ)

Q
FSMとビヘイビアツリー、どちらを使うべきですか?
A

AIの複雑さによって選び方が変わります。
単純な敵の行動(巡回・攻撃など)ならFSM、
多数の条件分岐や階層的な思考が必要な場合はビヘイビアツリーが最適です。
実際のゲーム開発では両方を組み合わせるのが主流です。

Q
Behavior DesignerやNodeCanvasは初心者でも使えますか?
A

はい!どちらもノードを線でつなぐだけでAIの思考を可視化できます。
プログラミングが苦手でも、条件やアクションをGUIで設定できるので安心です。
特に「Behavior Designer Pro」はチュートリアルも豊富で、初めてのAI開発にぴったりです。

Q
Emerald AIと自作AIを併用できますか?
A

可能です!
Emerald AIは内部でFSM+BT構造を持っているため、自作AIとの連携もスムーズ。
「行動のベースはEmerald AI、特殊な処理だけ自作」などの使い分けができます。
大規模プロジェクトでも十分対応できる柔軟な設計です。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク