うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Editor で利用できる簡易 StartCoroutine を作ってみる

※ローカルメソッドを利用しているため .Net 4.x にしてないと動作しません

IEnumerator の MoveNext が false になるまでループすれば
StartCoroutine の代わりができるので EditorApplication.update
利用して Editor 用の StartCoroutine を作成

public static class EditorIEnumerator
{
    public static void StartCoroutine(IEnumerator update)
    {
        void Callback()
        {
            if (update.MoveNext())
                return;
            EditorApplication.update -= Callback;
        }
        EditorApplication.update += Callback;
    }
}

下記のようにすればちゃんと実行される

// 呼び出し
EditorIEnumerator.StartCoroutine(Test());

// テスト用メソッド
private IEnumerator Test()
{
    Debug.Log("Begin");
    yield return null;
    Debug.Log("End");
}

f:id:hacchi_man:20200918221917p:plain