状态机的简单入门

Posted ly570

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了状态机的简单入门相关的知识,希望对你有一定的参考价值。

//移动状态
public class MoveState : StateObject

public MoveState(StateManger state):base(state)


public override void EnterState()

Debug.Log("进入移动状态");

public override void ExiState()

Debug.Log("离开移动状态");

public override void UpdateState()

Debug.Log("进入移动更新状态");
if (Input.GetKey(KeyCode.D))

state.ChangeState("Die");

if (Input.GetKey(KeyCode.I))

state.ChangeState("Idle");



//死亡状态
public class DieState : StateObject

public DieState(StateManger state) : base(state)


public override void EnterState()

Debug.Log("进入死亡状态");

public override void ExiState()

Debug.Log("离开死亡状态");

public override void UpdateState()

Debug.Log("进入死亡更新状态");

if (Input.GetKey(KeyCode.I))

state.ChangeState("Idle");



public class StateManger
//字典存储状态
Dictionary<string, StateObject> dic = new Dictionary<string, StateObject>();
//当前状态
StateObject currentstate;
//注册状态
public void Region(string statename,StateObject state)

//判断字典中是否存在这个键
if (!dic.ContainsKey(statename))

dic.Add(statename,state);


//设置默认状态
public void SetDefat(string statename)

//判断字典中是否存在这个状态
if (dic.ContainsKey(statename))

//存在就赋值给currentstate
currentstate = dic[statename];
//调用当前状态的进入(EnterState)方法
currentstate.EnterState();


//改变状态
public void ChangeState(string statename)

//判断字典中是否存在这个状态
if (dic.ContainsKey(statename))

//当前状态是否为空
if (currentstate!=null)

//调用上一个状态的离开方法
currentstate.ExiState();
//把取到的状态赋值给currentstate
currentstate = dic[statename];
//调用取到状态的进入方法
currentstate.EnterState();



//更新状态
public void UpdateState()

Debug.Log("更新状态");
if (currentstate!=null)

//当前状态的UpdateState方法
currentstate.UpdateState();



public class FMSC : MonoBehaviour
StateManger sm = new StateManger();
// Use this for initialization
void Start ()
//注册站着的方法
sm.Region("Idle",new IdleState(sm));
//注册死亡的方法
sm.Region("Die",new DieState(sm));
//注册移动的方法
sm.Region("Move",new MoveState(sm));
//设置默认状态
sm.SetDefat("Idle");


// Update is called once per frame
void Update ()
//持续调用当前状态的UpdateState方法
sm.UpdateState();

--------------------- 

以上是关于状态机的简单入门的主要内容,如果未能解决你的问题,请参考以下文章

游戏状态机的设计与实现

FPGA/数字IC手撕代码4——FSM状态机的简单应用

Stateless状态机的简单应用

Stateless状态机的简单应用

基于状态机的游戏框架

FSM有限状态机的实现