非组合模式的实现
使用组合模式现实MyComponent组件
组合模式的优点是分级,从图里可以看出StateEvent和MyEvent是以一种递归的结构组织的,也就是组件里包含一个StateEvent(记录所有状态对应的List),一个StateEvent里包含多个MyEvent(记录某个状态下某个时间点需要调用的所有函数)。使用文件系统作类比,StateEvent就是目录,MyEvent就是文件,目录和文件都实现了打开这个接口函数 ,而StateEvent和MyEvent都实现了Trigger这个接口函数,StateEvent的Trigger就是执行当前状态下所有的MyEvent的Trigger,而MyEvent的Trigger就是执行自己所存储的所有事件帧(回调函数)。因此我们只需要在MyComponent的Update中不断让StateEvent根据状态机所处的状态调用Trigger即可。
IStateEvent接口:
StateEvent类:
MyEvent类:
StateTrigger类(辅助类):
MyComponent脚本:之所以生成一个StateEvent的原因是,我们实现的是一个组件,这个组件的功能是存储状态机动画中各个状态中的事件帧。并在对应的时间里执行对应的事件。用户只需要获取我们这个组件中的se,并使用里面的getMyEvent(StateName,Time).Add(callBackFunc),就可以实现这个功能。
测试脚本:
结果: