/// <summary> /// 添加时间回调事件 /// </summary> /// <param name="destTime">Destination time.</param> /// <param name="callback">Callback.</param> /// <param name="count">count = 0表示一直循环.</param> public int AddFrameTake(int destFrame, int delayFrame, Action callback = null, int count = 1) { int tid = GetTid(); PEFrameTake take = new PEFrameTake { tid = tid, destFrame = FrameCount + destFrame, delayFrame = delayFrame, callback = callback, count = count, }; cacheFrameTakes.Add(take); return(tid); }
// Update CheckFrameTake private void CheckFrameTake() { FrameCount++; for (int i = 0; i < cacheFrameTakes.Count; i++) { frameTakes.Add(cacheFrameTakes[i]); } cacheFrameTakes.Clear(); for (int i = frameTakes.Count - 1; i >= 0; i--) { PEFrameTake take = frameTakes[i]; if (take.destFrame > FrameCount) { continue; } Action ac = take.callback; // 添加异常捕获机制 try { if (ac != null) { ac(); } } catch (Exception e) { Debug.Log("Exception:" + e.ToString()); } if (take.count == 1) { frameTakes.RemoveAt(i); tidCaches.Add(take.tid); } else { if (take.count != 0) { take.count--; } take.destFrame += take.delayFrame; } } }
/// <summary> /// 替换时间回调事件 /// </summary> public bool ReplaceFrameTake(int tid, int destFrame, int delayFrame, Action callback = null, int count = 1) { bool isReplace = false; PEFrameTake take = new PEFrameTake { tid = tid, destFrame = FrameCount + destFrame, delayFrame = delayFrame, callback = callback, count = count, }; for (int i = 0; i < frameTakes.Count; i++) { if (frameTakes[i].tid == tid) { frameTakes[i] = take; isReplace = true; } } return(isReplace); }