一.配置状态,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"); } } }
在程序中,有很多东西在同一条件下不同状态下会出现不同的情况,就好比王者荣耀的英雄技能,比如你正在释放技能,亚瑟向你发出沉默攻击,根据你技能不同的状态来做出处理,如果是冰女的大招就被打断了,如果是安其拉的那就不会。(状态模式实例)
当然除了被攻击外,很还有其他的类容是需要这种根据不同状态发生不同事情,就是这个环境类会根据不同的状态做一系列的不同的事。而策略模式和这个的不同之处,就是策略模式是针对某一件事情,可能有很多的策略方法来解决。