Пример #1
0
    /// <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);
    }
Пример #2
0
    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--;
            }
        }
    }
Пример #3
0
    /// <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);
    }
Пример #4
0
 static void ReturnTaskIEnumeratorNode(TaskIEnumeratorNode taskIEnumeratorNode)
 {
     taskIEnumeratorNode.Reset();
     queueTaskIEnumeratorNode.Enqueue(taskIEnumeratorNode);
 }