EditorCoroutine编辑器协程,用于编辑器扩展

public class EditorCoroutine

{   

    private static List<IEnumerator> _itors = null;

    private static List<int> _removeIdxs = null;

    private static UnityEditor.EditorApplication.CallbackFunction _updateFunc = null;

    private static bool _isUpdateRuning = false;

    public static void Stop()

   {

        _itors.Clear();

   }

    static EditorCoroutine()

   {

        _itors = new List<IEnumerator>();

        _removeIdxs = new List<int>();

        _updateFunc = _Update;

    }

public static void Start(IEnumerator itor)

   {

        _itors.Add(itor);

        _RunUpdate(true);

   }

private static void _RunUpdate(bool isRun)

  {

        if (isRun == _isUpdateRuning) return;

        if (isRun)

   {

            UnityEditor.EditorApplication.update += _updateFunc;

   }

   else

   {

            UnityEditor.EditorApplication.update -= _updateFunc;

    }

        _isUpdateRuning = isRun;

}

    private static void _Update()

{

        if (null == _itors || _itors.Count <= 0) return;

        for (int i = 0, c = _itors.Count; i < c; ++i)

{

            if (!_itors[i].MoveNext())

{

                _removeIdxs.Add(i);

}

}

        if (_removeIdxs.Count <= 0) return;

        for (int i = _removeIdxs.Count - 1; i >= 0; --i)

{

            _itors.RemoveAt(_removeIdxs[i]);

            _removeIdxs.RemoveAt(i);

}

  if (_itors.Count == 0)

{

            _RunUpdate(false);

}

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容