oniyarai’s tech memo

oniyarai’s tech memo

すぐ忘れる自分に捧げるメモ

Coroutineの使用方法と動作について

Coroutine使用法

コルーチンはコルーチンとして開始した関数内で処理を一旦停止、フレーム単位で停止後(または指定時間後)処理を再開できる機能。
別スレッドので処理を走らせられる(かのような)感。(実際にはマルチスレッドな訳ではない)
関数内で

  • 処理A
  • 指定時間待機
  • 処理B
  • 指定時間待機
  • 処理C

と言った一連の処理を記述できる。
処理間で待機が入っても、同一関数の処理なので、別途メンバ変数等によるState管理をしなくても、スタック変数で状態を保持できる。
また、時間のかかる処理を行う場合に「関数A->関数B->関数C->関数A」といった形で疑似的に並列処理を行える(懐かしのTSS)。

            private IEnumerator _honyaHonyaCoroutine = default;
            void Start()
            {
                _honyaHonyaCoroutine = CoHonyaHonya();
                StartCoroutine(_honyaHonyaCoroutine);
            }
            
            private IEnumerator CoHonyaHonya()
            {
                    // 処理A
                    yield return null;
                    // 処理B
                    yield return new WaitForSconds(3.0f);
                    // 処理C
                    yield return null;
                    // 処理D

            }

上記のようにIEnumerator型の関数を定義し、StartCoroutineの引数として渡してやることでコルーチンがスタートする。
コルーチンでは、
処理A->1frame待機->処理B->3秒待機->処理C->1frame待機->処理D->終了
という動作を行う。

StopCoroutine等についてはまた別途追記予定。