void OnUpdate() { float deltaTime = (float)(DateTime.Now.Subtract(previousTimeSinceStartup).TotalMilliseconds / 1000.0f); previousTimeSinceStartup = DateTime.Now; coroutines.RemoveAll(v => //修剪列表,引用丢失的协程一并消亡 { bool eq = null == v.owner; if (eq) { v.Clear(); } return(eq); }); if (coroutines.Count == 0) { return; } tempCoroutineList.Clear(); tempCoroutineList.AddRange(coroutines); for (var i = tempCoroutineList.Count - 1; i >= 0; i--) { EditorCoroutine coroutine = tempCoroutineList[i]; if (null != coroutine.currentYield && !coroutine.currentYield.IsDone(deltaTime)) { continue; } if (!MoveNext(coroutine)) { coroutine.Clear(); coroutines.Remove(coroutine); } } }
/// <summary> /// 移除指定的协程 /// </summary> /// <param name="target">迭代器所在的对象</param> /// <param name="routine">运行中的协程</param> public void StopCoroutine(ScriptableObject target, EditorCoroutine routine) { RemoveCoroutine(routine); }
public static void StopCoroutine(this ScriptableObject thisRef, EditorCoroutine coroutine) { CoroutineManager.Instance.StopCoroutine(thisRef, coroutine); }