Behavior Treeで敵AIを組めるようになった。でも、新しい公式サンプルを開いたら、見慣れないもう1つのAIツール「StateTree」が使われていて戸惑う。「Behavior TreeとStateTree、結局どっちを学べばいいの?」で手が止まります。
UE5世代では、EpicがAI 構築ツールとして StateTree を前面に出しており、公式テンプレートでの採用例も増えています。この記事では、Behavior Tree と何が違うのかを発想から整理し、 Behavior Tree記事とまったく同じ「巡回→追跡→帰還」の見張り をStateTreeで組み直して、2つを並べて見比べます。
StateTreeは実験的機能を脱して標準的に使える位置づけになっています。プラグインの有効化が要るかどうかはバージョンで変わるので、使っているUEで確認してください。
この記事でわかること
- Behavior Treeとの 発想の違い(優先度で選ぶ vs 状態から遷移する)
- StateTreeの登場人物: State / Task / Condition / Transition
- StateTree AI Component で動かすまでの手順
- どちらを選ぶか の判断表
- Behavior Tree記事と同じAIを組んで 構造を並べる
- 実践: 巡回→追跡→帰還の見張りをStateTreeで組み直す
Behavior Treeとの発想の違い
同じ敵AIを作るツールですが、 考え方の出発点が逆 です。ここが一番大事なところです。

- Behavior Tree: 毎フレーム ルートから木をたどり直し 、「今、優先度の高い行動はどれか」を選びます。中心にあるのは「選択」です
- StateTree: 「今どの状態にいるか」を持っていて、条件を満たしたら 今の状態から次の状態へ遷移 します。中心にあるのは「状態と遷移」です
Behavior Treeが「毎回、上から優先度で選び直す」のに対し、StateTreeは「今いる状態を基点に、次へ移る」。これは、enumとswitchで作るステートマシン の考え方の、正統な進化版だと考えると分かり やすいです。あのステートマシンを、専用のビジュアルエディタで、階層と遷移込みで組めるようにしたもの、それがStateTreeです。
StateTreeの登場人物
StateTreeを読むために、4つの言葉を押さえます。Behavior Treeを知っていれば、対応づけて理解できます。

- State(状態): 「巡回中」「追跡中」のような、AIが今いる状態。State同士は階層に組める
- Task(タスク): その状態にいる間に実行する処理。「巡回地点へ移動する」など。Behavior TreeのTaskに近い
- Condition(条件): その状態に入ってよいかを判定する条件(Enter Condition)。Behavior TreeのDecoratorに近い
- Transition(遷移): ある状態から別の状態へ移る矢印。「プレイヤーを見つけたら、巡回→追跡へ」。 これがStateTreeの主役 です
Behavior Treeが「木の枝を選ぶ」構造だったのに対し、StateTreeは 「状態の箱を、遷移の矢印でつなぐ」構造 です。仕様書に「巡回中に発見したら追跡へ」と書いてあれば、その矢印がそのままエディタに現れます。
最初のStateTreeを動かす
StateTreeでAIを動かす流れは、Behavior Treeと似ています。

- StateTreeアセットを作る: Content Browserで新規作成し、Schemaを StateTree AI に設定する(AI用のStateTreeであることを指定)
- Stateを置く: 「Patrol」「Chase」などのStateを作り、それぞれにTask(Move Toなど)を割り当てる
- Transitionをつなぐ: 各Stateに、次の状態へ移る条件と行き先を設定する
- Pawnで実行する: AIが動くPawn(またはAI Controller)に StateTree AI Component を付け、作ったStateTreeアセットを割り当てる
これで、Pawnを配置すればStateTreeが動きます。ターゲットや巡回地点といった、状態をまたいで使いたいデータは、StateTreeの Parameters に定義します。Behavior TreeのBlackboardにあたる「AIの共有メモ」です。移動の土台には NavMesh が要るのは、Behavior Treeのときと同じです。
どちらを選ぶか
「BehaviorTreeとStateTree、どちらで書くべきか」。これは、 AIの性格 で決めるのが分かりやすいです。

| こういうAIなら | おすすめ | 理由 |
|---|---|---|
| 状態がはっきりしている(巡回/追跡/帰還、ギミックの開閉) | StateTree | 状態と遷移がそのまま図になる。仕様書どおりに読める |
| 優先度の割り込みが複雑(多数の行動を毎回天秤にかける) | Behavior Tree | ルートから優先度で選び直す構造が向いている |
| 既存資産・情報量を重視 | Behavior Tree | 情報や既存プロジェクトが多く、学習素材が豊富 |
| 公式サンプルに合わせたい | StateTree | UE5世代のサンプルで採用例が増えている |
迷ったときは、 状態がはっきりしているならStateTreeから試す のがおすすめです。UE5世代の公式サンプルはStateTree側の採用が増えており、これから情報も増えていく見込みです。ただし今すぐ困っているなら、情報量が多いBehavior Treeのほうが早く動くこともあります。
どちらか一方が正解というより、 AIの向き不向き です。状態がくっきりしたAIやギミックはStateTree、優先度の駆け引きが命のAIはBehavior Tree。そして前述のとおり、Behavior TreeからStateTreeを呼ぶこともで きるので、 両方を組み合わせる 道もあります。
実践:見張りをStateTreeで組み直す
ステルスの見張り、ホラーの徘徊者、アクションの哨戒兵。 「普段は巡回し、見つけたら追い、見失ったら持ち場へ帰る」 はAIの基本形です。ここでは、Behavior Tree記事 とまったく同じ仕様をStateTreeで組み、2つの構造を並べて見比べます。
作るのは、 巡回地点を回り、プレイヤーを発見したら追跡に切り替わり、見失って5秒たったら巡回へ帰る 見張りです。挙動はBehavior Tree版と同一で、 差が出るのはエディタ上の見え方 です。
まず、同じAIをBehavior TreeとStateTreeで組むと、構造がどう見えるかを並べます。

Behavior Treeでは、ルートのSelectorの下に「追跡」「巡回」の枝が並び、Decoratorの条件で枝が選ばれます。StateTreeでは、「Patrol」「Chase」というStateが箱として並び、その間を 遷移の矢印 が結びます。「発見したらPatrol→Chase」「見失って5秒でChase→Patrol」という仕様が、そのまま矢印として読めます。
StateTreeの構成
| 要素 | 内容 |
|---|---|
| State「Patrol」 | Task: 巡回地点を選ぶ → Move To。Transition: プレイヤー発見で「Chase」へ |
| State「Chase」 | Task: ターゲットへ Move To。Transition: 見失って5秒経過で「Patrol」へ |
| 発見の供給元 | AI Perception の視覚。ターゲットをParametersに書く |
| Parameters | TargetActor(Object)、PatrolLocation(Vector)。Blackboard相当 |
遷移の考え方
StateTree(AI Schema)
├ State: Patrol
│ Task: FindPatrolLocation → Move To(PatrolLocation)
│ Transition: TargetActor が有効 → Chase へ
└ State: Chase
Task: Move To(TargetActor)
Transition: TargetActor を見失って 5秒 → Patrol へ
要点は、 遷移条件が「その状態から出る矢印」として1か所に集まる ことです。Behavior TreeではDecoratorの Observer aborts の設定で割り込みを表現しましたが、StateTreeでは「Patrolから出る条件」「Chaseから出る条件」が、それぞれのStateにまとまって書かれます。
確かめる
Playすると、 挙動はBehavior Tree版とまったく同じ です。敵は巡回地点を歩き回り、視界にプレイヤーが入ると追跡に切り替わり、見失って5秒たつと巡回へ帰ります。
うまくいかないときの切り分けです。
- Chaseに移らない → PatrolのTransition条件(
TargetActorが有効か)を確認。AI PerceptionがParametersに書けているか - ずっとChaseのまま帰らない → ChaseのTransitionの「5秒」タイマーか、
TargetActorをクリアする処理を確認 - そもそも動かない → Pawnに StateTree AI Component が付いていて、アセットが割り当たっているか。NavMeshがあるか
ポイントは2つです。
- 同じAIなら、行数はほぼ同じ: この巡回AIくらいなら、Behavior TreeでもStateTreeでも手間は変わりません。違うのは「見え方」で、StateTreeは遷移が仕様書のまま図になります
- 差が出るのは割り込みを足したとき: たとえば「どの状態にいても、被弾したら1秒ひるむ」を足すと、StateTreeは共通のTransitionで、Behavior Treeは高優先度の枝で表現します。ここで得意不得意が出ます。まずは同じ題材で両方を組み、Behavior Tree と読み比べてみてください
おまけ:先に知っておくと良いこと
Behavior TreeからStateTreeを呼べる。 UE5.4以降には、Behavior Treeのタスクから StateTree を実行するノード(BTTask_RunStateTree)があります。「大枠はBehavior Treeの優先度で回し、細かい状態遷移はStateTreeに任せる」という組み合わせができます。どちらか一方に決めきる必要はありません。
ステートマシンからの地続きの進化。 enumとswitchのステートマシン で「状態を1つに決める」考え方に慣れていれば、StateTreeはその発展形としてすんなり入れます。コードで書いていた match(状態 ごとの分岐)を、ビジュアルエディタの箱と矢印に置き換えたもの、と捉えてください。
まずは小さく試す。 いきなり複雑なAIをStateTreeで組むより、2〜3状態の単純なギミック(扉の「閉→開→閉」など)で、State・Task・Transitionの手触りを掴むのがおすすめです。仕組みが分かれば、敵AIへの応用はすぐです。
まとめ
StateTreeとBehavior Treeは、発想が逆の兄弟です。
| 観点 | Behavior Tree | StateTree |
|---|---|---|
| 考え方 | ルートから優先度で選び直す | 今の状態から遷移する |
| 主役 | 木の枝(Selector/Sequence) | 状態の箱と遷移の矢印 |
| 得意 | 複雑な優先度の割り込み | 明確な状態・ギミック |
| 共有データ | Blackboard | Parameters |
そして忘れてはいけないのが、 どちらも現役で、併存している ことです。置き換えではなく、AIの性格で選び、必要なら組み合わせる。
これで、新しいサンプルでStateTreeを見ても戸惑わなくなりました。あなたのゲームの敵AIは、状態がくっきりしていますか、それとも優先度の駆け引きが命ですか。その答えが、どちらで書くかを教えてくれます。
さらに学ぶために
- Behavior Treeで敵AIを作る — 同じAIをBTで組む(読み比べ推奨)
- enumとswitchで作るステートマシン — StateTreeの発想の土台
- AI Perceptionで敵に見つけさせる — 発見イベントの供給元
- NavMeshの設定と最適化 — AI移動の土台