敵AIに「巡回して、プレイヤーを見つけたら追いかけて、近づいたら攻撃して、見失ったら巡回に戻る」——こんな振る舞いを ステートマシン で組むと、状態が増えるほど「どの状態からどの状態へ」の遷移が爆発的に増えて、こんがらがって きます。そこで中〜大規模なAIで定番なのが Behavior Tree(ビヘイビアツリー) 。振る舞いを 木構造 で組み立て、再利用と拡張をぐっと楽にする手法です。
この記事では、Behavior Treeの 基本ノード(Sequence・Selector・条件・アクション)と Success/Failure/Running の考え方、ステートマシンとの使い分け、Unity 6のBehaviorパッケージ、そして 巡回→発見→追跡→攻撃 の敵AIを組む実践までを解説します。
この記事でわかること
- Behavior Treeの 基本ノード(Sequence・Selector・条件・アクション)
- Success / Failure / Running の3つの結果
- ステートマシンとの使い分け(FSM vs BT)
- Unity 6 Behaviorパッケージ(グラフ・Blackboard・カスタムAction)
- 実践:巡回→発見→追跡→攻撃 の敵AIをBTで組む
動作確認環境: Unity 6(6000.0.16f1 以降)+ Behavior パッケージ 1.0.15 以降。Behaviorパッケージは更新で画面やAPIが変わりやすいため、手元の版と表示が違う場合は 公式ドキュメント を参照してください。BTの考え方自体は2022.3にも共通です
Behavior Treeの基本ノード
Behavior Treeは、木構造をルート(Root)から下へたどりながら実行されます。ノードは大きく 「枝(合成ノード)」 と 「葉(条件・アクション)」 に分かれます。まずこの4つを押さえれば、どんなBTも読めるようになります。

| ノード | 役割 |
|---|---|
| Sequence | 子を 順に実行 し、全部成功で成功。1つでも失敗したらそこで失敗(=AND) |
| Selector | 子を 順に試し、1つでも成功したら成功。全部失敗で失敗(=OR、フォールバック) |
| 条件(Condition) | 「プレイヤーが見えるか」など 状況の真偽 を判定する葉 |
| アクション(Action) | 「移動する」「攻撃する」など 実際の動作 を実行する葉 |
この2つの合成ノードの組み合わせが、BTの心臓部です。 Sequence は「Aして、Bして、Cする」 という手順を、 Selector は「まずAを試し、ダメならB、それもダメならC」 という優先順位を表します。たとえば「Selectorの下に『攻撃するSequence』『追跡するSequence』『巡回するAction』を優先順で並べる」だけで、「攻撃できるなら攻撃、無理なら追跡、それも無理なら巡回」という賢い判断が組めます。
Success・Failure・Runningの3つの結果
BTの各ノードは、実行されるたびに 3つの結果のどれか を親に返します。この仕組みが、木全体の流れを制御します。

- Success(成功): そのノードの処理が成功した。Sequenceは次の子へ進み、Selectorはそこで成功を確定する
- Failure(失敗): 処理が失敗した。Sequenceはそこで失敗を確定し、Selectorは次の子を試す
- Running(実行中): まだ終わっていない。 次のフレームに続く という意味で、木は毎フレーム評価され、Runningのノードから再開する
特に重要なのが Running です。「目的地まで移動する」「攻撃モーションを再生する」のように 複数フレームかかる処理 は、完了するまで毎フレーム Running を返し続け、終わったら Success を返します。これにより、BTは「歩いている途中」といった継続的な行動を自然に表現できます。
ステートマシンとの使い分け
「じゃあ ステートマシン はもういらないの?」——いいえ。両者は得意分野が違い、規模で使い分けます。
