読者です 読者をやめる 読者になる 読者になる

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現在)

僕はぼんやりしていて間があいたので別途購入しました。

 

www.youtube.com

こちらのOverviewを見たり、

ドキュメントを読んだりしつつ簡単なツリーを作ってみました。

 

Videoだと省略されている前準備として、使っているSeek actionはNavMeshを使うので、

NavMeshがBakeされた地形と、

seekerとなるオブジェクトにNavigation agentがアタッチされている必要があります。

 

f:id:kurihara-n:20150723163022p:plain

こんな感じでシーンを用意しました。

赤いキューブがターゲットとなるオブジェクトで、

アニメーションをつけて左右に反復移動をしています。

緑のキューブが追跡する側のオブジェクトとなり、

このオブジェクトにbehavior treeを持たせます。

 

緑のオブジェクトを選択した状態で、

[Tools] > [Behavior Designer] > [Editor] でエディタが開きます。

f:id:kurihara-n:20150723163859p:plain

これは完成した状態のツリーです。

完全なエディタで編集が出来るので素晴らしいです。

基本的には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の両方となります。

f:id:kurihara-n:20150723165620p:plain

実行すると、最初は緑のキューブが奥方向に進み、

赤のキューブが視界に入った時点で、そのキューブの追跡をするようになります。

 

Sequenceのabort typeをbothにすると、

ターゲットの追跡をしているときに、再度視界の範囲からターゲットが抜けると、

追跡をやめて、

指定位置への移動へ戻るという挙動をするようになります。

 

Behavior designerはかなり優れたアセットなので、

もっと使ってみたいと思います。