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