其他分享
首页 > 其他分享> > 在unity中实现一个有限状态机(1)

在unity中实现一个有限状态机(1)

作者:互联网

转换条件和状态id

public enum Transition
{
      NullTransiton
}
public enum StateID
{
    NullStateID
}

状态基类

public class FsmState 
{
    private StateID mstateID;//状态的id,是上述枚举类型
    public StateID MStateID { get { return mstateID; } }
    //当前状态下,对于不同的条件(Transiton),它会变成哪种状态,用一个字典记录
    private Dictionary<Transition, StateID> stateTransitionDic = new Dictionary<Transition, StateID>();
    //向外接口,添加在当前状态下,给出一个条件会变成哪种状态
    public void AddTransition(Transition transition, StateID stateID)
    {
        if(transition==Transition.NullTransiton)
        {
            Debug.LogError("条件不合理");
            return;
        }
        if(stateID== StateID.NullStateID)
        {
            Debug.LogError("变化后的状态为空");
            return;
        }
        if(stateTransitionDic.ContainsKey(transition))
        {
            Debug.LogError("当前状态已经有对该条件的处理了");
            return;
        }
        stateTransitionDic.Add(transition,stateID);
    }
    public void DeleteTransition(Transition transition)
    {
        if(!stateTransitionDic.ContainsKey(transition))
        {
            Debug.LogError("当前状态下没有该变化条件");
            return;
        }
        stateTransitionDic.Remove(transition);
    }

    //在当前状态下,给出一个条件,会切换到哪种状态,返回状态的id
    public StateID MakeTransition(Transition transition)
    {
        if(transition==Transition.NullTransiton)
        {
            Debug.LogError("条件为空");
            return StateID.NullStateID;
        }
        if(!stateTransitionDic.ContainsKey(transition))
        {
            Debug.LogError("该状态对该条件不响应");
            return StateID.NullStateID;
        }
        return stateTransitionDic[transition];
        
    }
    //进入当前状态时做的事情
    public virtual void OnEnter()
    {

    }
    //离开当前状态时做的事情
    public virtual void OnExit()
    {

    }
    //在当前状态每帧都执行的事情,Reson主要是每一帧判断是否进行状态的切换
    public virtual void Reson(GameObject npc, GameObject player)
    {

    }
    //当前状态每帧都做的事
    public virtual void Update()
    {

    }
}

标签:stateTransitionDic,状态,return,StateID,有限,transition,状态机,unity,public
来源: https://blog.csdn.net/jjegoing/article/details/121612970