# Decorator

Decoratorのスクリプトを作成し、行いたい処理を記述することでオリジナルの条件判定やループ処理を追加できます。

## Decoratorスクリプトファイルの作成

- Projectウィンドウから作成したい場所で右クリック。
- 右クリックメニューから、「Create > Arbor > BehaviourTree > Decorator C# Script」を選択。
- ファイル名を入力して決定

## 呼び出される関数

作成したDecotarotをコンポジットノードやアクションノードに追加すると、スクリプトの各関数が呼びだされるようになります。

- OnAwake
  初めてノードがアクティブになった時に呼ばれます。
- OnStart
  ノードがアクティブになった時に呼ばれます。
- OnAbort
  ノードがDecoratorにより中断する時に呼ばれます。
- OnEnd
  ノードが終了するときに呼ばれます。
- HasConditionCheck
  ConditionCheckを行うかどうかを判定するために呼ばれます。
  ConditionCheckを行わない場合はoverrideしてfalseを返すようにしてください。
  デフォルトtrue。
- OnConditionCheck
  条件判定を行う時に呼ばれます。
  条件に合致する場合はtrueを、合致しなければfalseを返してください。
  中断するかどうかは最終的にはAbortFlagsにより決定されます。
- OnRepeatCheck
  ノードが正常終了した場合に繰り返すかどうかを判定する際に呼ばれます。
  繰り返す場合はtrueを返してください。
  デフォルトfalse
- OnFinishExecute
  実行結果を変更するために呼ばれます。
  デフォルトでは受け取った結果をそのまま返します。

### 注意点

- MonoBehaviourのenabledは実行制御のために内部で使用しているため、代替となるbehaviourEnabledを使用してください。

## 呼び出し順

- ノードに複数のDecoratorを追加している場合は上から順に呼ばれます。
- OnEnableとOnDisable以外のMonoBehaviourのコールバックメソッドも使用できますが、Start()はOnConditionCheck()などの後に呼ばれてしまうため注意してください。

## 変数の宣言

作成したスクリプトにpublicもしくはSerializedField属性をつけたフィールドを宣言することでArbor Editorで編集可能になります。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using Arbor;
    using Arbor.BehaviourTree;

    [AddComponentMenu("")]
    public class TestDecorator : Decorator {
    	public string myName;
    	// 略
    }

## データフロー

Decoratorではデータフローによる値の入出力が可能です。

詳しくは、「スクリプティング : データフロー」を参照してください。

スクリプティング : データフロー