FSMStateManager
管理FSMState状态
初始化时确定有多少个状态,之后添加状态。
之后调用RunState运行状态的回调,运行状态。
using UnityEngine;
public class FSMStateManager
{
private FSMState[] states;
public FSMStateManager(int stateCount)
{
Initial(stateCount);
}
/// <summary>
/// 初始化
/// </summary>
/// <param name="stateCount"></param>
private void Initial(int stateCount)
{
states = new FSMState[stateCount];
}
/// <summary>
/// 状态的边界【最后添加的一个状态的下标】
/// </summary>
private sbyte countBorder = -1;
/// <summary>
/// 当前状态的下标
/// </summary>
private sbyte currentIndex = -1;
/// <summary>
/// 添加状态
/// </summary>
/// <param name="state"></param>
public void AddState(FSMState state)
{
countBorder++;
if (countBorder > states.Length - 1)
{
Debug.Log("添加状态失败,状态已满!");
return;
}
states[countBorder] = state;
}
/// <summary>
/// 运行状态
/// </summary>
/// <param name="index"></param>
public void RunState(int index)
{
// 如果当前状态已经运行
if (currentIndex == index)
{
return;
}
// 如果已经有状态在运行
if (currentIndex != -1)
{
states[currentIndex].OnExit();
}
currentIndex = (sbyte)index;
// 运行新的状态
states[currentIndex].OnEnter();
}
/// <summary>
/// 当前状态更新
/// </summary>
public void CurrentStateUpdate()
{
// 如果当前没有状态
if (currentIndex == -1)
{
return;
}
states[currentIndex].OnStay();
}
/// <summary>
/// 当前状态
/// </summary>
/// <returns></returns>
public int CurrentState()
{
return currentIndex;
}
}
FSMState
状态的基类
提供了进入、停留、离开回调供子类重写。
public class FSMState
{
/// <summary>
/// 进入状态
/// </summary>
public virtual void OnEnter()
{}
/// <summary>
/// 状态中
/// </summary>
public virtual void OnStay()
{}
/// <summary>
/// 退出状态
/// </summary>
public virtual void OnExit()
{}
}