Behavior Designerの4種類のTaskを理解することで基本的な使い方を学んでみます。
- Behavior Designerとは?
- Taskとは?
- Action Task
- Composite Task
- Taskの成否
- Conditional Task
- Decorator Task
- Taskの「実行中」状態
- まとめ
Behavior Designerとは?
Behavior DesignerはUnityでBehavior Treeを扱うためのアセットです。
これを使うと簡単にBehavior Treeがビジュアルスクリプティングで構築できます。
そしてこのBehavior Designerには4種類の「Task」が存在します。
- Action Task
- Composite Task
- Conditional Task
- Decorator Task
この記事ではこれらの違いをまとめていきます。
Taskとは?
Behavior DesignerでBehavior Treeを組み立てる時、初期状態だと下図のようにルートだけが存在します。
これに、試しにログを吐く処理をくっつけてみます。
このBehavior Treeを実行すると、「Logged」というログが出力されます。
このような一つの処理単位をTaskと呼びます。
Action Task
前節のログ出力を行うタスクのようにツリーの末端で処理を行うTaskをAction Taskと総称します。
ログ出力の他にも、攻撃をしたり移動をしたり待機をしたり、といったTaskがあります。
Composite Task
前節のAction Taskの他に、Composite Taskというものがあります。
Composite Taskは、子として複数のTaskを接続できるTaskです。
例として、「子Taskをランダムに実行する」といったものがあります。
上図の青いTaskがランダム実行のためのTaskです。
Composite Taskには他にも、「子Taskを順番に実行する」ものや、
「子タスクを同時に実行する」ものなどがあります。
Taskの成否
次節のConditional Taskの話をする前にTaskの状態について書きます。
Taskは実行されると、そのタスクが成功したか失敗したかを返します。
最初のログ出力の例の場合、ログ出力Taskが実行されると「成功」になります。
ログ出力されると「成功」になる(上図の緑のチェック)
ここで、「二つのbool値を比較する」Taskを考えます。
このTaskはbool値が一致すれば「成功」、正しくなければ「失敗」になります。
bool値が一致しないと「失敗」になる(上図の赤のチェック)
このようにTaskには成功、失敗があります。
Conditional Task
Conditional Taskとは、何かしらの条件判定を行ってその結果が成功か失敗かを返すTaskです。
実は、前節の「二つのbool値を比較する」TaskはConditional Taskの一つです。
もう少し実用的な使用例として、Selectorと併せて使う方法があります。
SelectorはComposite Taskの一つで、「子Taskのいずれかが成功するまで順番に実行する」Taskです。
これらを使って作ったBehavior Treeが下図です。
これが実行されるとまず左側のBool Comparisonが判定され成否を返します。
もしこれが失敗した場合にはSelectorにより次の子TaskであるLogが実行され、「Failed」というログが出力されることになります。
Conditional Taskはこのようにして使います。
他にもコライダーが衝突しているかをチェックするものや、GameObjectがアクティブかをチェックするものなどがあります。
Decorator Task
Taskの種類の最後の一つにDecorator Taskがあります。
これは、子タスクを一つだけ持ち、その実行方法を制御するTaskです。
例えば子タスクを指定した回数だけ実行するTaskがあります。
上図の例では、Logが3回実行された終了します。
Repeaterの他にも、子が成功するまで繰り返すものだったり、
子の成功状態を反転するものなどがあります。
Taskの「実行中」状態
さてTaskには「成功」や「失敗」があるということを書きました。 実はTaskにはこのほかに「実行中」という状態があります。
例えば「一定時間何もせず待機する」Action Taskを考えます。
このタスクは実行されると指定した時間だけ「実行中」状態になります。
緑は「実行中」
そして一定時間経過したら「成功」となります。
このようにTaskは「実行中」という状態も持ちます。
まとめ
以上、Behavior Designerで扱う4種類のTaskについてまとめました。
実際にはゲームに合わせてこれらのTaskを拡張し、AIなどを作っていくことになります。