using UnityEngine; using System.Collections; public enum BehaviorStatus { Invalid, Success, Fail, Running }; public abstract class AiBehavior : MonoBehaviour { public string behaviorName; protected virtual void OnBegin(AiBlackboard blackboard) { } protected virtual void OnEnd(AiBlackboard blackboard) { } protected abstract BehaviorStatus OnExecute(AiBlackboard blackboard); private BehaviorStatus _state = BehaviorStatus.Invalid; public BehaviorStatus State { get { return _state; } } public bool Running { get { return _state == BehaviorStatus.Running; } } public BehaviorStatus Tick(AiBlackboard blackboard) { if (_state != BehaviorStatus.Running) { OnBegin(blackboard); } _state = OnExecute(blackboard); if (_state == BehaviorStatus.Running) { _state = BehaviorStatus.Success; } if (_state != BehaviorStatus.Running) { OnEnd(blackboard); } return _state; } }