🏁 はじめに
ゲームの中で、まるで自分で考えているように動く「敵キャラ」や「仲間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での実装手順
- 状態を定義する
public enum EnemyState { Patrol, Alert, Chase, Attack, Flee }
こんなふうに列挙型(enum)を使って状態名を定義します。 - スクリプトを作成する
プロジェクトウィンドウで右クリック → 「Create」→「C# Script」を選択し、EnemyAIと名付けましょう。
このスクリプトで現在の状態(currentState)を管理します。 - 状態ごとの処理を書く
Update()内でswitch (currentState)を使い、各状態に応じた関数を呼び出します。
条件を満たしたらcurrentStateを次の状態へ切り替えます。 - スクリプトを敵キャラにアタッチ
作成したスクリプトを敵キャラクターにドラッグ&ドロップでアタッチし、
インスペクターからプレイヤーの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技術入門──広大な人工知能の世界を体系的に学ぶ

次は、もう少し複雑な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を設計できるので、開発スピードが大幅にアップします💡
🧠 簡単なビヘイビアツリー構築例
- シーンにNPCを配置
Hierarchyで「右クリック → 3D Object → Capsule」を選び、NPCのモデルを作成します。
「NavMeshAgent」をアタッチしておきましょう。 - Behavior Designerを導入
アセットストアからインポート後、「Add Component」→「Behavior Tree」を追加します。
インスペクターに「Behavior Tree Editor」が表示されます。 - ノードを追加して行動を設定
Root → Selector → Sequence → Actionノードをつなげてみましょう。
例:「敵が見える?」→「追跡する」→「攻撃する」 - 再生して確認
再生ボタンを押すと、ツリーが上から下へ実行され、成功・失敗の結果がリアルタイムで確認できます。
このようにツリーを組み合わせるだけで、まるで自分で判断しているかのような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の行動が“より人間的で自然”に見えるようになります✨
🧩 実装のステップ
- FSMでモードを定義する
まずはステートマシンを使って大きなAIモードを定義します。
例:「Patrol(巡回)」「Battle(戦闘)」「Flee(逃走)」など。 - BTで行動ノードを構築する
Behavior Designer や NodeCanvas を使って、それぞれのモードに対応するビヘイビアツリーを作ります。
- 巡回モード → Waypointを順に移動
- 戦闘モード → 敵を発見 → 追跡 → 攻撃
- 逃走モード → 一定距離まで離れたら安全エリアへ移動
- 状態遷移時に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パッケージなら「ノードをつなぐだけ」で実現できます✨
🧩 準備ステップ
- シーンをセットアップ
Hierarchyウィンドウで右クリック → 「3D Object」→「Plane」を選択し、地面を作成します。
その上にCapsuleを置いてNPCのモデルを作り、「NavMeshAgent」コンポーネントを追加します。 - NavMeshをベイク
「Window」→「AI」→「Navigation」を開き、地面を選択して「Bake」タブからBakeをクリック。
これでAIが歩き回れるマップが完成します。 - 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を深く学びたい人へ
理論をしっかり理解したい方は、こちらの書籍もおすすめです👇
- ゲームAI技術入門──広大な人工知能の世界を体系的に学ぶ
✅ Amazonでチェックする|✅ 楽天でチェックする
FSMやBTを体系的に理解できるだけでなく、強化学習やプランニングAIなどの最新手法にも触れられる一冊です📚

これで、あなたのNPCは「ただ動くだけの敵」ではなく、「考えて行動するキャラクター」へと進化します。
📝 まとめ
今回は、UnityでAIを実装するための2大手法「状態マシン(FSM)」と「ビヘイビアツリー(BT)」を中心に、AIを賢く制御する方法を紹介しました。
FSMで「行動モード」を管理し、BTで「具体的な思考と判断」を制御することで、NPCに人間らしい知能を持たせることができます。
さらに、Unity公式のBehaviorパッケージやアセットストアのツールを活用すれば、AI構築をビジュアルに、そして圧倒的に効率よく進められます。
アクション、RPG、サバイバル、どんなジャンルでも応用可能です!
🎮 今回紹介したおすすめアセット
- 🧩 Behavior Designer Pro – DOTS対応:ノードベースで高度な行動AIを構築!
- 🧠 NodeCanvas:FSMとBTの両方を統合できる万能ツール。
- 🤖 Emerald AI 2025:ノーコードで戦闘AIや仲間AIを構築可能。
- 🧰 Odin Inspector & Serializer:AIパラメータの可視化・デバッグに最適。
これらを組み合わせれば、AIの設計から動作テストまで、すべてをUnityエディター内で完結できます✨
あなたのNPCが、プレイヤーの行動に反応して「考える」ようになる瞬間をぜひ体験してみてください。
🔗 あわせて読みたい
- Unityでステートマシンを活用!ゲーム開発を効率化する方法
- UnityでNavMeshAgentを使った追跡AIを作ろう!
- 爆速AI開発!Unityで使える最強アセット10選【2024年版】
- 【完全解説】Unityの非同期処理!Coroutineとasync/awaitの違いと使い方
- Unityのシリアライズ完全ガイド!データの保存・読み込みを自由自在に
よくある質問(FAQ)
- QFSMとビヘイビアツリー、どちらを使うべきですか?
- A
AIの複雑さによって選び方が変わります。
単純な敵の行動(巡回・攻撃など)ならFSM、
多数の条件分岐や階層的な思考が必要な場合はビヘイビアツリーが最適です。
実際のゲーム開発では両方を組み合わせるのが主流です。
- QBehavior DesignerやNodeCanvasは初心者でも使えますか?
- A
はい!どちらもノードを線でつなぐだけでAIの思考を可視化できます。
プログラミングが苦手でも、条件やアクションをGUIで設定できるので安心です。
特に「Behavior Designer Pro」はチュートリアルも豊富で、初めてのAI開発にぴったりです。
- QEmerald AIと自作AIを併用できますか?
- A
可能です!
Emerald AIは内部でFSM+BT構造を持っているため、自作AIとの連携もスムーズ。
「行動のベースはEmerald AI、特殊な処理だけ自作」などの使い分けができます。
大規模プロジェクトでも十分対応できる柔軟な設計です。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。