using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; /// /// 延迟处理管理器 /// public class DelayedProcessingManager : SingletonManager { /// /// 协程字典 /// public Dictionary coroutines=new Dictionary(); /// /// 延迟多少秒 /// /// 要延迟的MonoBehaviour类 /// 延迟多少秒 /// 要执行的函数 public void DelayDoSecond(MonoBehaviour mono,float delay,UnityAction unityAction) { mono.StartCoroutine(E_DelayDoSecond(delay, unityAction)); } /// /// 延迟多少秒 重置版 /// public void ResetDelayDoSecond(string id,MonoBehaviour mono,float delay,UnityAction unityAction) { if (coroutines.ContainsKey(id)) { mono.StopCoroutine(coroutines[id]); coroutines.Remove(id); } Coroutine coroutine = mono.StartCoroutine(E_DelayDoSecond(delay, unityAction)); coroutines.Add(id, coroutine); } /// /// 延迟多少秒的协程 /// private IEnumerator E_DelayDoSecond(float delay, UnityAction unityAction) { yield return new WaitForSeconds(delay); unityAction?.Invoke(); } /// /// 延迟多少帧 /// /// 要延迟的MonoBehaviour类 /// 延迟多少秒 /// 要执行的函数 public void DelayDoFrame(MonoBehaviour mono,float delay,UnityAction unityAction) { mono.StartCoroutine(E_DelayDoFrame(delay, unityAction)); } /// /// 延迟多少帧的协程 /// private IEnumerator E_DelayDoFrame(float delay, UnityAction unityAction) { for (int i = 0; i < delay; i++) { yield return null; } unityAction?.Invoke(); } /// /// 清空 /// public void Clear() { coroutines.Clear(); } }