状态模式使用示例

一.配置状态,txt文件

run,RunState
idel,IdelState

二.创建这两个状态类,继承IState

using UnityEngine;

namespace StateNameSpace
{
    public class IdelState : IState
    {

        public IdelState(StateContext stateContext) : base(stateContext) { }

        public override void Handle(object data)
        {
            //播放受伤动画
            Debug.Log("受到攻击");
        }
    }
}
using UnityEngine;

namespace StateNameSpace
{
    public class RunState : IState
    {

        public RunState(StateContext stateContext) : base(stateContext) { }

        public override void Handle(object data)
        {
            //跑动状态受到攻击,改变为行走状态
            mContext.SetState("idel");
            Debug.Log("遭受攻击,奔跑被打断");
            //其他处理等,吹不出来了
        }
    }
}

三.使用一下

using UnityEngine;
using StateNameSpace;

public class TestStateMode : MonoBehaviour {

    public TextAsset asset;
    private StateContext bAttackcontext;

    void Awake()
    {
        bAttackcontext = new StateContext(asset, "idel");
    }
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            //假如是遭受攻击
            bAttackcontext.Handle(null);
        }

        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        if (h != 0 || v != 0)
        {
            bAttackcontext.SetState("run");
        }
        else
        {
            bAttackcontext.SetState("idel");
        }
	}
}

在程序中,有很多东西在同一条件下不同状态下会出现不同的情况,就好比王者荣耀的英雄技能,比如你正在释放技能,亚瑟向你发出沉默攻击,根据你技能不同的状态来做出处理,如果是冰女的大招就被打断了,如果是安其拉的那就不会。(状态模式实例

当然除了被攻击外,很还有其他的类容是需要这种根据不同状态发生不同事情,就是这个环境类会根据不同的状态做一系列的不同的事。而策略模式和这个的不同之处,就是策略模式是针对某一件事情,可能有很多的策略方法来解决。


首页 我的博客
粤ICP备17103704号