/// <summary> /// 创建帧延时触发器 /// </summary> /// <param name="frameDelay">延时帧数</param> /// <param name="onTrigger">回调函数</param> /// <param name="args">回调参数</param> /// <returns></returns> public static void CreateFrameTrigger(int frameDelay, OnTrigger onTrigger, params object[] args) { FrameTriggerInfo ftInfo = new FrameTriggerInfo(); ftInfo.iFrameDelay = frameDelay < 1 ? 1 : frameDelay; ftInfo.onTrigger = onTrigger; ftInfo.args = args; mFrameTrigger.Add(ftInfo); }
/// <summary> /// 逐帧更新按帧延时回调 /// </summary> public static void UpdateFrameTrigger() { try { if (mFrameTrigger == null) { return; } for (int i = mFrameTrigger.Count - 1; i >= 0; --i) { FrameTriggerInfo ftInfo = mFrameTrigger[i] as FrameTriggerInfo; if (ftInfo == null) { mFrameTrigger.RemoveAt(i); continue; } else { ftInfo.iFrameDelay--; // 因为是在LateUpdate逻辑中,所以还在本帧的时候就会进行判断 // 此处需要先判定>=0 if (ftInfo.iFrameDelay >= 0) { continue; } mFrameTrigger.RemoveAt(i); if (ftInfo != null && ftInfo.onTrigger != null) { try { ftInfo.onTrigger(ftInfo.args); } catch (System.Exception e) { LogSystem.LogError("UpdateFrameTrigger : ", e.ToString()); } } } } } catch (System.Exception ex) { LogSystem.LogError(ex.ToString()); } }