【Unity】Editor でコルーチンを実行する

2022/04/27DEVELOP, Unity

疑似的にコルーチンぽいことをするには EditorApplication.update にイベントを追加すると楽です。

static List<IEnumerator> _coroutine = new List<IEnumerator>();
static void StartCorountine(IEnumerator routine)
{
    _coroutine.Add(routine);
    if (_coroutine.Count == 1)
    {
        EditorApplication.update += ExecuteCoroutine;
    }
}
static void ExecuteCoroutine()
{
    for (int i = 0; i < _coroutine.Count;)
    {
        if (_coroutine[i] == null || !_coroutine[i].MoveNext())
        {
            _coroutine.RemoveAt(i);
        }
        else
        {
            i++;
        }
    }
    
    if (_coroutine.Count == 0)
    {
        EditorApplication.update -= ExecuteCoroutine;
    }
}

パッケージを導入する

About Editor Coroutines | Editor Coroutines | 1.0.0 (unity3d.com) こちらのEditor Coroutines パッケージを取り込むと実装の手間が省けます。

using Unity.EditorCoroutines.Editor;
EditorCoroutineUtility.StartCoroutineOwnerless(Coroutine());
static IEnumerator Coroutine()
{
    yield break;
}

Posted by kazupon