EvaluateDecoratorをC#スクリプトで記述できます。
作成方法
- Projectウィンドウの「+」ボタンをクリック。
- メニューからLogic Toolkit > Scripts > Decorator > Evaluate Decorator C# Scriptを選択。
- スクリプト名を入力し、Enterで決定。
スクリプトの書き方
- LogicToolkit.BehaviorTree.EvaluateDecoratorを継承したクラスを作成します。
- 型にSystem.SerializableAttributeを適用します。
- protected override bool OnEvaluate()を実装し、実行時の処理を記述します。
- アクティブになった際にprotected override void OnActivated()が呼ばれます。
- 非アクティブになった際にprotected override void OnDeactivated()が呼ばれます。
- 評価対象になった際にprotected override void OnEnterEvaluation()が呼ばれます。
 Selectorの子ノードに設定したDecoratorのAbort FlagsにLower Priorityを設定している場合は、優先度の低いノード(弟ノード)が実行中も評価対象になります。
- 評価対象ではなくなった際にprotected override void OnLeaveEvaluation()が呼ばれます。
コード例
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 | using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LogicToolkit;
using LogicToolkit.BehaviorTrees;
[System.Serializable]
public class EvaluateDecoratorExample : EvaluateDecorator
{
    private float startTime = float.MaxValue;
    // OnActivated is called when activated.
    protected override void OnActivated()
    {
        startTime = Time.time;
    }
    // OnEnterEvaluation is called when entering the evaluation target
    protected override void OnEnterEvaluation()
    {
    }
    // OnEvaluate is called when evaluating the condition
    protected override bool OnEvaluate()
    {
        return Time.time - startTime <= 1f;
    }
    // OnLeaveEvaluation is called when leaving the evaluation target
    protected override void OnLeaveEvaluation()
    {
    }
    // OnDeactivated is called when it is deactivated.
    protected override void OnDeactivated()
    {
    }
}
 | 
 
この例では、Abort FlagsをSelfに設定するとノードがアクティブになってから1秒経過後に中断します。
なお、同様の機能としてTimeLimitというスクリプトが予め同梱されています。