Fsm(3)-GameFramework游戏框架搭建教程

继续为Fsm添加获取状态的方法

    /// <summary>

    /// 获取状态

    /// </summary>

    public TState GetState<TState>() where TState : FsmState<T>

    {

        return GetState(typeof(TState)) as TState;

    }

    /// <summary>

    /// 获取状态

    /// </summary>

    public FsmState<T> GetState(Type stateType)

    {

        if (stateType == null)

        {

            Debug.LogError("要获取的状态为空");

        }

        if (!typeof(FsmState<T>).IsAssignableFrom(stateType))

        {

            Debug.LogError("要获取的状态" + stateType.FullName + "没有直接或间接的实现" + typeof(FsmState<T>).FullName);

        }

        FsmState<T> state = null;

        if (m_States.TryGetValue(stateType.FullName, out state))

        {

            return state;

        }

        return null;

    }

然后就可以开始添加切换状态的方法

    /// <summary>

    /// 切换状态

    /// </summary>

    public void ChangeState<TState>() where TState : FsmState<T>

    {

        ChangeState(typeof(TState));

    }

    /// <summary>

    /// 切换状态

    /// </summary>

    public void ChangeState(Type type)

    {

        if (CurrentState == null)

        {

            Debug.LogError("当前状态机状态为空,无法切换状态");

        }

        FsmState<T> state = GetState(type);

        if (state == null)

        {

            Debug.Log("获取到的状态为空,无法切换:" + type.FullName);

        }

        CurrentState.OnLeave(this, false);

        CurrentStateTime = 0f;

        CurrentState = state;

        CurrentState.OnEnter(this);

    }

Fsm类还得继续完善一些相关方法,比如开始状态机的方法

image

顺便添加一个抛出状态机事件的方法

image

025源码论坛声明 1、本网站中的绝大部分资源来源于网络, 本网站不保证所有资源的正确性和安全性,不为其合法性负责.
2、对于一切使用本网站资源而可能遭致的意外、疏忽、侵权及其造成的损失,本网站对其概不负责,亦不承担任何法律责任。
3、其他单位或个人使用、转载或引用本站原创文章时必须同时征得本025源码网的同意.
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时删除并致以最深的歉意。
5、如需要本站的游戏源码或搭建帮助,可以联系站长 15623571666(微信同号)或者扫描右侧二维码!

您可能还会对下面的文章感兴趣:

    cache
    Processed in 0.003855 Second.