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
 実行結果を変更するために呼ばれます。
 デフォルトでは受け取った結果をそのまま返します。
- OnUpdate
 BehaviourTreeのUpdate()のタイミングで呼ばれます。
 毎フレーム呼ばれるかどうかはBehaviourTreeのUpdate Settingsに依存。
- OnLateUpdate
 BehaviourTreeのLateUpdate()のタイミングで呼ばれます。
 毎フレーム呼ばれるかどうかはBehaviourTreeのUpdate Settingsに依存。
- OnFixedUpdate
 BehaviourTreeのFixedUpdate()のタイミングで呼ばれます。
- OnGraphPause
 グラフが再生中に一時停止した時に呼ばれます。
- OnGraphResume
 グラフが一時停止から再開したときに呼ばれます。
- OnGraphStop
 グラフが再生停止したときに呼ばれます。
- MonoBehaviourのメッセージ関数
 詳しくはUnity ScriptReferenceのMonoBehaviourのMessagesを参照してください。
呼び出し順
 
- ノードに複数のDecoratorを追加している場合は上から順に呼ばれます。
- OnEnableとOnDisable以外のMonoBehaviourのコールバックメソッドも使用できますが、Start()はOnConditionCheck()などの後に呼ばれてしまうため注意してください。
フィールドの宣言
 
作成したスクリプトにpublicもしくはSerializedField属性をつけたフィールドを宣言することでArbor Editorで編集可能になります。
|  |  | 
インスペクターからフィールドを編集するのと同様の機能です。
詳しくは以下のUnityマニュアルを参照してください。
データフロー
Decoratorではデータフローによる値の入出力が可能です。
詳しくは、スクリプティング : データフローを参照してください。
async/await
async/awaitによる非同期待機に対応しております。
詳しくはasync/awaitを参照してください。
補足説明
- ファイル名とクラス名が一致している必要があります。
- Editorフォルダなどの特殊フォルダ以下に配置すると認識されなくなります。
- 自動的に付与されるAddComponentMenu("")はInspectorのAdd Componentに表示されないようにするためのものです。
- グラフを介さずにGameObjectへ直接追加した場合の動作はサポートいたしません。
- C#スクリプトの変更を反映するにはコンパイルが必要です。
 PreferencesのAuto Refreshをオフにしている場合などは手動でメニューの「Assets > Refresh」を行う必要があります。
- MonoBehaviourのenabledは実行制御のために内部で使用しているため、代替となるbehaviourEnabledを使用してください。