Behavior Designerを試してみる
Unityにおけるビヘイビアツリー作成アセット、Behaviour Designer.
Opsive.com :: Behavior Designer
https://www.assetstore.unity3d.com/jp/#!/content/15277
$75ドルで購入可能。
Overviewで説明しているActionはMovement packに含まれています。
https://www.assetstore.unity3d.com/jp/#!/content/16853
これは別途$10のアセットなのですが、
The Movement Pack is free for new Behavior Designer purchases - just send us your Behavior Designer invoice number.
とあり、Behavior Desinerを購入してすぐにコンタクトとると無料で手に入るみたいです。(2015/07/23現在)
僕はぼんやりしていて間があいたので別途購入しました。
こちらのOverviewを見たり、
ドキュメントを読んだりしつつ簡単なツリーを作ってみました。
Videoだと省略されている前準備として、使っているSeek actionはNavMeshを使うので、
NavMeshがBakeされた地形と、
seekerとなるオブジェクトにNavigation agentがアタッチされている必要があります。
こんな感じでシーンを用意しました。
赤いキューブがターゲットとなるオブジェクトで、
アニメーションをつけて左右に反復移動をしています。
緑のキューブが追跡する側のオブジェクトとなり、
このオブジェクトにbehavior treeを持たせます。
緑のオブジェクトを選択した状態で、
[Tools] > [Behavior Designer] > [Editor] でエディタが開きます。
これは完成した状態のツリーです。
完全なエディタで編集が出来るので素晴らしいです。
基本的にはOverviewで作っているものと同じものです。
このツリーでは末端のアクション以外の制御ノードとしての
Compositesが2つあり、
それがSelectorとSequenceです。
SelectorはORとして動作するもので、子のノードいずれかがtrueの場合そちらを実行します。
Sequence はANDとして動作するもので、
子のノードをTrueのうちは順番に実行します。
優先度は左側が高くなります。
このツリーは、ターゲットが一度視界に入ったら、そのあとはそのターゲットを追跡(seek)し、
ターゲットが視界に入るまえは右側のseek(指定のポジションまでの移動)を行う、という動作をします。
CompositesはAbort typeがあり、none, low priority, self, bothがあります。
ここが少し分かりにくかったのですが、
http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=89
こちらに詳しく書いてあります。
通常は最適化のために他のノードが実行中であれば、なにもしないようになっているので、
この例のツリーでSequenceのabort typeをnoneのままにしていると、
初期状態でターゲットが視界に入っていないと
Falseを返し、そのまま右側のSeekのみ、その後は実行されることになります。
なのでSequenceのabort typeはlow priorityを指定します。
これは、そのノードが一度FalseになってもTrueになる条件が成立すれば、よりlow priorityのものを中止し、
自分の実行を行うようになります。
Selfは自分の子を実行中でもFalseとなる条件では自身の実行を中止するようになります。
Both は low priorityとselfの両方となります。
実行すると、最初は緑のキューブが奥方向に進み、
赤のキューブが視界に入った時点で、そのキューブの追跡をするようになります。
Sequenceのabort typeをbothにすると、
ターゲットの追跡をしているときに、再度視界の範囲からターゲットが抜けると、
追跡をやめて、
指定位置への移動へ戻るという挙動をするようになります。
Behavior designerはかなり優れたアセットなので、
もっと使ってみたいと思います。