Unity状态机FSM

Unity状态机FSM

一:状态机介绍

有限状态机,也称为 FSM(Finite State Machine) ,这些状态是有限的、不重叠的,其在任意时刻都处于有限状态集合中的某一状态。当其获得特定输入时,将从当前状态转换到另一个状态 ,或者仍然保持在当前状态

状态机的应用领域

--- 玩家动作控制:比如一个玩家动作较多,我们可以使用状态机进行管理

--- UI界面的切换与管理

--- 怪物AI的设计

 

二:状态机设计实例

我们以案例为基础,设计一个人物有三种状态,在三种状态之间自由切换。

我先把里面的几个类描述一下

StateBase所有状态基类

StateMachine状态机类,负责管理所有的状态以及切换

PlayerCtrl玩家控制类,包含一个状态机以及自身控制逻辑

IdleStateRunState,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">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值