Beispiel #1
0
        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);
                }
            }
        }
Beispiel #2
0
 /// <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);
 }