FSM
有限状态机和Unity的Animator类似,不过FSM除了动画还可以应用在如AI状态等。
FSM框架
State:
状态名
状态的Transition(字典)
状态的进入、执行、离开事件
状态的进入()
- 执行状态进入事件
- 将状态的执行事件添加到MonoHelper中
状态的离开() - 执行状态离开事件
- 将状态的执行事件从MonoHelper中移除
添加或设置Transition()
获取Transition()
获取所有的Transition()
StateMachine:State
所有的子状态
所有的子状态参数(字典)
当前状态
默认状态
添加状态()
- 判断当前是否已经有该状态,或者当前状态机管理的子状态中已经有这个状态名
- 没有的话添加
- 如果添加后,子状态数量为1,说明是第一个状态,将其设置为默认状态。
- 如果当前状态为空,则将当前状态=默认状态。
移除状态() - 如果子状态不包含要移除的状态,或者要移除的是当前状态,报错
- 否则移除状态
- 如果移除的是默认状态,则设置第一个状态为新的默认状态。
切换状态() - 目标状态是否为当前状态机管理
- 如果当前状态是状态机,关闭状态机。如果是状态,执行状态离开方法。
- 获取新状态
- 如果新状态是状态机,开启状态机。如果是状态,执行状态进入方法。
开启状态机() - 执行状态进入事件
- 绑定执行事件到MonoHelper
- 如果子状态是状态机,递归开启子状态机。
- 如果子状态是状态,执行状态的进入方法。
关闭状态机() - 如果当前状态是状态机,递归关闭状态机。
- 否则,执行子状态离方法。
- 执行当前状态机的离开方法。
检测当前状态的参数() 该方法需要在构造时绑定到状态机的执行事件中 - 如果当前状态的参数中有一个满足,则切换到目标状态
设置参数()
获取参数()
MonoHelper:
主要是用来帮助在每帧或自定义间隔事件执行状态或状态机的执行事件
时间间隔
状态执行事件(字典)
执行事件的参数数组
执行事件数组
协程定时循环执行()
- 拷贝状态执行事件字典的参数到参数数组
- 拷贝状态执行事件字典的事件到事件数组
- 执行状态事件
携程定时执行()