スクリプトUnityを触っていると、コルーチン(Coroutine)を使う場面が多々あります。......なんだけど、初心者の頃はコルーチンの正体を追求しないでおまじない的に使っていたため、改めて情報をまとめてみることに。初心者向けを謳いながらマニアックな部分にも突っ込んでます。SierraUnity2018.2.2f1コルーチンとはコルーチンとは処理を中断した後、同じ部分から続けて再開できる処理のまとまりです。指定時間待った後に後続の処理を続けたり、1フレームごとにImageのアルファの値を変化させて、徐々にフェードインさせることが可能なんです。Update()では別の処理を続けつつ、コルーチンで3秒後に何かのフラグを変更したり、はたまたリソースをダウンロードしたり、なんて非同期っぽい処理も実装可能です。英語のままならCoroutineで、Co(協調する)-Routine(処理のまとまり)となっている通り、一緒に動いてくれる処理のまとまりなんです。公式のリファレンスもあわせてご覧くださいな。マニュアルhttps://docs.unity3d.com/ja/current/Manual/Coroutines.html関数を呼び出すと、値を返す前に実行が完了します。つのフレーム内で行われるということを意味します。<処理を待つ時間>』のように記述します。<処理を待つ時間>はフレーム単位であったり、秒だったりと、割と柔軟に指定できるので便利です。ここで指定した時間が経過すると、続きの処理を行うようになります。これがあるのでウェイト処理などが実装できるんです。yieldはいろんな意味を持つ言葉でちょっとイメージを掴みにくいですが、ここでは「明け渡す」とか「譲る」といった用法が近いかもしれません。指定した時間だけ処理を明け渡しますよ、なんて記述になっています。サブルーチンコルーチンと似たような言葉にサブルーチンがあります。こちらも処理のまとまりですが、こちらはデフォルトだと中断した後に同じ場所からの再開はできません。リセットしたら最初からやり直しになるファミコンの古いゲームみたいなイメージでしょうか。フラグとか作って呼び出されるたびに実行ポイントを変える、みたいなことは実装できるでしょうが、手続き型全盛期時代のプログラミングになりそうです。話が逸れましたが、大事な点は時間に関係する処理や非同期的な処理を盛り込むのに便利だということ。マルチスレッドとの違いメインの処理をしつつ裏では別の処理をする、という点ではコルーチンはマルチスレッドと似ています。何が違うかと言えば、マルチスレッドの場合はマルチコアCPUの場合に別のCPUを使って並列処理をさせることができますが、コルーチンはあくまでシングルスレッド内で動いている処理。処理のタイミングを変えているだけなんです。UnityのAPI、例えばUnityEngineの下にあるGameObjectを生成する処理や、コンポーネントを操作する処理などはメインスレッドで動くことが前提となっています。これを別スレッドで動かそうとすると「メインスレッドで動かせよオラァン!」なんて怒られます。以下のように別スレッドでgameObjectを触ってみます。Gist.適当なGameObjectにスクリプトをアタッチしてゲームを実行すると、以下のメッセージが出力されます。Assets/Scripts/ThreadTester.cs:16)めっちゃ怒られました。