ルルのゲーム開発備忘録

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

【Unity】入門:コルーチンまとめ

コルーチンとは

Unityにおいてコルーチンとは、

実行を停止して Unity へ制御を戻し、その次のフレームで停止したところから続行することができる関数*1

です。通常、普通の関数は1フレーム内で処理が最後まで走りますが、コルーチンを使うとフレームをまたいだ制御をすることができます。
この処理まで数秒待ってほしいとか、この処理が終わるまでは次の処理にはいってほしくない時などによく使います。

コルーチンの使い方

コルーチンの宣言
        IEnumerator [コルーチン名]
        {
            yield return [待ちたいものに応じた処理]
        }

戻り値の型をIEnumerator(配列やリストに実装されているIEnumerableインターフェイスと紛らわしいので注意)にして、関数内でyiele return ~で始まる処理が最低一つは必要です。
これがないとコンパイルエラーがでます。

コルーチンの実行
StartCoroutine([コルーチン名]);

よく使うコルーチンの処理

個人的によく使うコルーチンを紹介します。

yield return null

1フレームだけ待機する処理です。

        IEnumerator yWaitFrame()
        {
            // 1フレーム待つ
            yield return null;

            // 1フレーム待ってからここ以下が実行
        }

余談ですが、自分はコルーチン名には最初に「y」をつけるようにしています。

yield return new WaitForSeconds(n)

n秒待ちます。

yield return new WaitUntil(() =>bool値)

bool値がtrueを返すまで待ちます。

yield return new WaitWhile(() => bool値)

bool値がtrueの間は待ちます。

yield break

コルーチンを途中で強制的に終了。

WaitUntileとWaitWhileは個人的にはどっち使うかはあんまり気にしたことないです。

       IEnumerator yWaitTask()
        {
            // 3秒待つ
            yield return new WaitForSeconds(3);

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

            // isCompletedがfalseの間は待つ
            yield return new WaitWhile(() => isCompleted == false);
        }

まとめ

以上で、コルーチンの簡単な使い方の紹介です。ちなみにコルーチンは非同期処理ではあるんですが、複数の処理を別スレッドで処理しているわけではなく、メインスレッドで処理されているのでなんちゃって並列処理です。マルチスレッド処理をちゃんとしたい場合はTaskUniTask*2を使いましょう。