ノードの構成要素

ルートノード

ビヘイビアツリーを実行する際に一番最初にアクティブになるノードです。

1つの子ノードと接続できます。

コンポジットノード

1つか複数の子ノードを持ち、どの子ノードを実行するかの制御を行います。

どのように制御するかはCompositeBehaviourスクリプトで記述されています。

また、後に説明するDecoratorスクリプトやServiceスクリプトを追加できます。

組み込みCompositeBehaviour

  • Selector
    子ノードを左から順に実行し、子ノードが成功を返した時点で終了し、親ノードに成功を返します。
    すべての子ノードが失敗を返した場合は、親ノードに失敗を返します。
    左から順に成功ノードを探し、それ以降のノードは実行したくない場合に用います。
  • Sequencer
    子ノードを左から順に実行し、子ノードが失敗を返した時点で終了し、親ノードに失敗を返します。
    すべての子ノードが成功を返した場合は、親ノードに成功を返します。
    子ノードが成功を返す限りすべて実行させたい場合に用います。
  • ParallelSelector
    すべての子ノードを並列に実行し、いずれかの子ノードが成功を返した時点ですべて終了し、親ノードに成功を返します。
    すべての子ノードが失敗を返した場合は、親ノードに失敗を返します。
  • ParallelSequencer
    すべての子ノードを並列に実行し、いずれかの子ノードが失敗を返した時点ですべて終了し、親ノードに失敗を返します。
    すべての子ノードが成功を返した場合は、親ノードに成功を返します。

組み込みCompositeBehaviourのリファレンスはこちらを参照してください。

Arborリファレンス : 組み込みCompositeBehaviour

アクションノード

アクションを実行するノードです。

どのようなアクションを行うかはActionBehaviourスクリプトで記述します。

また、こちらもDecoratorスクリプトやServiceスクリプトを追加できるようになっています。

組み込みActionBehaviourのリファレンスはこちらを参照してください。

Arborリファレンス : 組み込みActionBehaviour

ActionBehaviourスクリプトの作成についてはこちら。

スクリプティング : ActionBehaviour

Decoratorスクリプト

条件判定を行って実行中ノードの中断や割り込みを行ったり、終了するタイミングで繰り返し判定などを行えるスクリプトです。

コンポジットノードやアクションノードに追加して使用します。

組み込みDecoratorのリファレンスはこちらを参照してください。

Arborリファレンス : 組み込みDecorator

Decoratorスクリプトの作成についてはこちら。

スクリプティング : Decorator

条件判定について

複数のDecoratorが1ノードに追加されている場合、すべての条件判定に論理演算を行った結果trueとなった場合にのみノードが実行されます。

論理演算

Decoratorの判定結果は論理演算が行われて最終結果が求められます。

  • And
    一つ上のDecoratorの結果とAND演算をします。
    ともに結果がtrueである場合にのみ論理演算結果がtrueとなります。
  • Or
    一つ上のDecoratorの結果とOR演算をします。
    いずれかがtrueであれば論理演算結果がtrueとなります。
  • Not
    Decoratorの結果をNOT演算(反転)します。
    有効にした場合はNOT演算した結果とAND/OR演算を行います。

論理演算は上から順に行われます。
「ド・モルガンの法則」に従って、求めたい判定結果となるよう上から順にDecoratorを並べてください。

AbortFlagsについて

中断や割り込みの対象はAbortFlagsで制御します。

  • Self
    自ノードもしくはその配下のノードが実行中に条件判定を行う。
    条件判定の結果がfalseである場合は中断し、親ノードへ失敗を返す。
  • LowerPriority
    自ノードよりも右にある低優先度のノードが実行中に条件判定を行う。
    条件判定の結果がtrueである場合は実行中ノードを中断し、自ノードがアクティブになる。

上記2つのフラグを組み合わせて設定できます。

また、AbortFlagsに関係なく自ノードがアクティブになる際に一度条件判定を行い、結果がfalseであればそのまま失敗として返します。

Serviceスクリプト

Serviceスクリプトはコンポジットノードとアクションノードに追加でき、ノードがアクティブの間何かしらの処理を行えるスクリプトです。

例のBehaviourTreeでは使用していませんが、
例えばプレイヤーとの距離をParameterに格納するServiceをSelectorノードに追加するなど、補助的な処理を記述するのに適しています。

Serviceスクリプトの作成についてはこちら。

スクリプティング : Service