敵が部屋を歩き回り、プレイヤーを見つけると追ってくる。壁の裏に隠れると、追うのをやめてまた歩き出す。こうした敵を作るときは、移動そのものに加えて「いつ、どの行動へ切り替えるか」を考える必要があります。
Behavior Tree(ビヘイビアツリー) は、その行動の選び方を木の形で組む仕組みです。「相手が見えているなら追う。そうでなければ巡回する」という方針を、枝の条件と並び方で表せます。
他のエンジンでいうと: Unity にも Godot にも、これに当たる標準機能はありません(アセットや自作で補います)。 エンジンに最初から入っている ことが、UEでAIを組むときの利点になります。
この記事では、まず巡回だけを動かし、次にプレイヤーの発見と追跡を足します。最後は近づいたときに「攻撃」と表示させ、行動が切り替わったことまで確かめましょう。
この記事でわかること
- AI Controller・Behavior Tree・Blackboardの役割分担
- SelectorとSequenceで木を読み解く方法
- 巡回だけを先に動かし、あとから追跡の枝を足す手順
- Observer Abortsで、行動の途中でも切り替える仕組み
この記事で作るもの
- 周囲の行き先を選び、移動して2秒待つ敵
- プレイヤーを見つけると巡回を中断して追い、近づくと攻撃のログを出す
- 見失うと追跡を中断して巡回へ戻る
UE5のThird Personテンプレートを使う単独プレイの例です。攻撃アニメーションやダメージは、このAIの判断が動いてから追加できます。
AIを動かす3つの役割
Behavior Treeだけでは、画面の敵は動きません。操作する役、行動を選ぶ役、判断材料を覚える場所を組み合わせます。

| 部品 | 今回の役割 |
|---|---|
| AI Controller | 敵の体を操作し、Behavior Treeを起動する |
| Behavior Tree | 条件を見て、巡回や追跡などの行動を選ぶ |
| Blackboard | 「誰を追うか」「どこへ歩くか」を保存する |
操作される体は Pawn と呼びます。今回使う Character は、歩行などの移動機能を持つPawnの一種です。「AI Controllerが中の人、Characterが体」と考えると、役割を分けやすくなります。
Blackboardは、AIが読む共有メモのようなものです。たとえば、目で相手を見つける処理が「追う相手」を書き込み、追跡の処理がそこを読んで移動します。相手を見つけた処理から、巡回・追跡のすべてへ個別に指示を送る必要がなくなります。
SelectorとSequence:木の読み方
木は上の Root(入口) からたどります。同じ親につながる子は、左から順に試します。まず覚えたいのが、子の結果をどう扱うかを決める2種類です。

| 種類 | 子が成功したら | 子が失敗したら |
|---|---|---|
| Selector | そこで成功して終わ る | 右の子を試す。全部失敗なら失敗 |
| Sequence | 右の子へ進む。全部成功なら成功 | そこで失敗して終わる |
Selectorは「どの行動を選ぶか」 を表します。左に「プレイヤーを追う」、右に「巡回する」を置けば、追う条件が成立する限り、そちらが先に選ばれます。
Sequenceは「選んだ行動を、どんな手順で進めるか」 を表します。巡回なら「行き先を決める→そこまで移動する→少し待つ」です。移動が失敗した場合は、その後の待機へ進まず、この手順を失敗として終えます。
「実行中」は、成功でも失敗でもない
移動など、ひとつの行動を担当する部品を Task と呼びます。敵が目的地へ歩いている間、移動のTaskは 実行中(Running / In Progress) です。移動指示を出しただけでは成功にならず、到着するまで次のTaskへ進みません。

これはSelectorでも同じです。左の追跡が実行中だからといって、右の巡回も始めるわけではありません。ひとつのTaskの結果を待ち、成功か失敗が決まってから先へ進むのが、今回の木の基本です。途中で行動を変える方法は、後半で足します。
Task・Decorator・Serviceの違い
木の部品には、行動するものだけでなく、条件を確認するものもありま す。

| 部品 | 役割 | 例 |
|---|---|---|
| Task | 行動を実行する | Move Toで移動、Waitで待機 |
| Decorator | 枝やTaskを実行してよいか確かめる | 「追う相手がいる」なら通す |
| Service | 取り付けた枝が動いている間、繰り返し確認する | 一定間隔で相手との距離を測る |
Decoratorは条件、Taskは行動と分けると、木を読んだときに判断の流れが見えます。ただし、Taskが実行直前に対象を確かめ、無効なら失敗を返すこともあります。
Serviceは、その枝を離れると止まります。どの行動中でも必要な確認なら、両方の枝をまとめる親へ付けます。今回の発見と見失いは、後ほど説明するAI Perceptionの通知を使うため、Serviceを自作する必要はありません。
敵と、歩ける場所を用意する
敵の見た目と操作役を作る
Third Personテンプレートを開き、作業用に「AI」フォルダを作ります。
- 「BP_ThirdPersonCharacter」を複製し、「BP_Enemy」と名付けます。敵の見た目や歩行アニメーションを流用できます。
- BP_Enemyを開き、EventGraphの入力処理などのノードを削除します。複製元のプレイヤーはそのまま使います。
- 新しい「Blueprint Class」を作り、「All Classes」で「AIController」を検索して選びます。名前は「BP_EnemyAIController」です。
- BP_Enemyの「Class Defaults」で、下表の操作設定を指定します。Character Movementの2項目は、「Components」でそのコンポーネントを選んで設定します。
| 設定 | 値 |
|---|---|
| AI Controller Class | BP_EnemyAIController |
| Auto Possess AI | Placed in World or Spawned |
| Auto Possess Player | Disabled |
| Use Controller Rotation Yaw | オフ |
| Character Movement → Orient Rotation to Movement | オン |
| Character Movement → Max Walk Speed | 300 |
Possessは、ControllerがPawnの操作を受け持つことです。Auto Possess AIの設定により、レベルへ置いた敵にも、あとから生成した敵にもAI Controllerが付きます。向きの設定は、歩く方向へ敵を向かせるためのものです。UEの距離は標準ではcmなので、Max Walk Speedの300は秒速3mにあたります。
AIが歩ける地図を作る
レベルの平らな場所へ敵を1体置き、「Nav Mesh Bounds Volume」を追加して、敵とプレイヤーが歩く床全体を覆います。P を押し、床に緑の範囲が表示されるか確認してください。
この NavMesh は、AI用の「歩ける場所の地図」です。見た目が床でも、ここに地図がなければMove Toで歩けません。緑にならない場合は NavMeshの記事 を先に確認しましょう。
