void RemoveCoroutine(EditorCoroutine target) { if (null != target) { coroutines.Remove(target); target.Clear(); } }
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); } } }