Unity状态机FSM
一:状态机介绍
有限状态机,也称为 FSM(Finite State Machine) ,这些状态是有限的、不重叠的,其在任意时刻都处于有限状态集合中的某一状态。当其获得特定输入时,将从当前状态转换到另一个状态 ,或者仍然保持在当前状态。
状态机的应用领域
--- 玩家动作控制:比如一个玩家动作较多,我们可以使用状态机进行管理
--- UI界面的切换与管理
--- 怪物AI的设计
二:状态机设计实例
我们以案例为基础,设计一个人物有三种状态,在三种状态之间自由切换。
我先把里面的几个类描述一下
StateBase:所有状态基类
StateMachine:状态机类,负责管理所有的状态以及切换
PlayerCtrl:玩家控制类,包含一个状态机以及自身控制逻辑
IdleState,RunState,AttackState三种状态
StateTemplate<T>:泛型类,为了解决人物和怪物都存在状态机的时候,可以指定对应的所有者
2.1 设计状态机基类
一个状态机里面,有很多种状态,每一种状态都有很多相似的特征,这里我们需要一个状态基类。基类里面包含所有状态的基本信息。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class StateBase
{
/// <summary>
/// 每个状态对应不同的ID号
/// </summary>
public int ID { get; private set; }
/// <summary>
/// 状态机
/// </summary>
public StateMachine machine;
/// <summary>
/// Construtor
/// </summary>
/// <param name="id">状态的id号(id号有对应的枚举)</param>
public StateBase(int id)
{
ID = id;
}
//进入状态
public virtual void OnEnter(params object[] args) { }
//状态停留
public virtual void OnStay(params object[] args) { }
//状态退出
public virtual void OnExit(params object[] args) { }
//检查状态
public virtual void OnCheck(params object[] args) { }
}
public class StateTemplate<T> : StateBase
{
/// <summary>
/// 状态的拥有者
/// </summary>
public T m_owner;
/// <summary>
/// Constructor
/// </summary>
/// <param name="id">

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



