使用代码关联unity有限状态机
注:参考来自b站up主 Joker_Unity 的教程视频,完整视频链接:
unity中文课堂
在战斗系统中通常使用有限状态机对角色的各个状态(移动、攻击等)进行管理。为了应对复杂的状态转化,我们可以使用C#代码自定义状态机或行为树的节点。
先创建所需的基类:
- 状态基类
- 有限状态机基类(后续角色的基类)
在unity中创建 StateBase 、FSMController 脚本,如下:
创建状态基类
在该基类中应具有以下成员:
- 当前的状态(枚举值)
- 持有该状态对象的控制器
- 初始化函数
- 进入、停留、离开该状态时的函数
在定义枚举值时,由于后续需求的枚举类型是未知的,因此我们使用宽泛的Enum类型:
public Enum stateType;
完整代码如下:
using System;
/// <summary>
/// 状态对象基类
/// 之后的所以状态都继承自这个基类
/// 如:idel wlak attack
/// </summary>
public abstract class StateBase
{
//当前 状态对象 代表的 枚举状态
public Enum stateType;
//当前控制的角色(角色控制器)
public FSMController controller;
public virtual void Init(FSMController controller, Enum stateType)
{
this