ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

【Unity】コルーチンを使うときに、メモリ割り当てを少し減らす方法・最適化

WaitUntilやWaitWhileはインスタンスを作成する

コルーチン内のyield returnでnew WaitUntileやWaitWhileは、新しいインスタンスを作成してメモリアロケーションが発生するので、何回もコルーチンを呼び出す場合はあんまりよろしくない。
代わりにyield return nullはメモリアロケーションが発生しないのでこちらに代用できると最適化できる。

コーディングの例

メモリアロケーションが発生するコード

        IEnumerator yWaitTask()
        {
            // isCompletedがtrueになるまで待つ
            yield return new WaitUntil(() => isCompleted == true);
        }

最適化バージョン

        IEnumerator yWaitTask2()
        {
            while(isCompleted == false) {
                yield return null;
            }
        }