/// <summary> /// 开启协程 /// </summary> /// <param name="iEnumerator"></param> /// <param name="useLateUpdate">是否在LateUpdate中执行</param> /// <returns>返回传入的iEnumerator</returns> public IEnumerator <float> StartIEnumerator(IEnumerator <float> iEnumerator, bool useLateUpdate = false) { Init(); #if UNITY_EDITOR if (useLateUpdate && hasLateUpate == false) { throw new System.Exception("StartIEnumerator useLateUpdate, but hasLateUpate==false"); } #endif List <TaskIEnumeratorNode> list = useLateUpdate ? listLateUpdateNode : listUpdateNode; TaskIEnumeratorNode taskIEnumeratorNode = GetTaskIEnumeratorNode().Init(iEnumerator); list.Add(taskIEnumeratorNode); return(iEnumerator); }
void UpdateListNode(List <TaskIEnumeratorNode> list) { for (int i = 0; i < list.Count; i++) { list[i].Update(deltaTime); } for (int i = 0; i < list.Count; i++) { TaskIEnumeratorNode node = list[i]; if (node.finished) { list.RemoveAt(i); ReturnTaskIEnumeratorNode(node); i--; } } }
/// <summary> /// 结束协程 /// </summary> /// <param name="iEnumerator"></param> /// <param name="useLateUpdate">是否在LateUpdate中执行,与开启协程时的参数对应</param> /// <returns>返回null</returns> public IEnumerator <float> StopIEnumerator(IEnumerator <float> iEnumerator, bool useLateUpdate = false) { if (iEnumerator == null) { return(null); } List <TaskIEnumeratorNode> list = useLateUpdate ? listLateUpdateNode:listUpdateNode; for (int i = 0; i < list.Count; i++) { if (list[i].iEnumerator == iEnumerator) { TaskIEnumeratorNode node = list[i]; list.RemoveAt(i); ReturnTaskIEnumeratorNode(node); i--; } } return(null); }
static void ReturnTaskIEnumeratorNode(TaskIEnumeratorNode taskIEnumeratorNode) { taskIEnumeratorNode.Reset(); queueTaskIEnumeratorNode.Enqueue(taskIEnumeratorNode); }