之前写了一个计时器,用一个单例 TimeManager 中的一个存储委托的字典,在Update反复执行实现,调用方法注册实现,倒计时为0时调用委托,同时从字典中移除,注销没有想到好方法,凑合着先用。
这两天需要一个技能流程配置,我的技能可能会有冲刺后攻击,也可能只有冲刺,也可能只有攻击。如果分别在对象上写 if 各自管理流程,代码排版看着很难受,需要加很多标记变量。所以在 TimeManager 中新建一个存储委托的列表的字典,也是在 Update 中反复执行,调用方法注册,委托返回 bool,当为true时下一帧依旧执行当前委托,当为 false 的时候委托结束,删除当前委托,下一帧进入下一个委托。一个列表中的所有委托都执行结束之后,在字典中删除本条流程列表,一个流程就这样执行结束。
public class TimeManager : MonoSingleton<TimeManager>
{
// 计时器事件字典
private Dictionary<TimeEvent, float> m_CountDownDict = new Dictionary<TimeEvent, float>();
private int processIndex = 0;
private Dictionary<int, List<ProcessEvent>> m_ProcessDict = new Dictionary<int, List<ProcessEvent>>();
public void Update()
{
CountDown();
RunProcess();
}