こんにちは、Unityエンジニアのオオバです。

複数同時実行したコルーチンの終了を待機したい
こういうケースありますよね。

オオバ
オオバ
全ての画像が読み込まれたら先に進むみたいなパターン

いわゆる並列実行です。
本記事では並列コルーチンと呼称して解説していきます。

ParallelCoroutineを作りました

コルーチンのリストを引数に渡すと並列で処理するParallelCoroutineを作りました。
👉 ParallelCoroutine - Githubはコチラをクリック

💻ソースコード : ParallelCoroutine.cs抜粋
ParallelCoroutine.Execute(this, new List<IEnumerator>()  
{
    TestCoroutine(1),  
    TestCoroutine(2, 2),  
    TestCoroutine(3, 3),  
    TestCoroutine(4, 4),  
    TestCoroutine(5, 5)  
}, () => Debug.Log("AllComplete"));  

これを実行すると以下のようなログが出力されます。

【Unity】並列コルーチンを簡単に実装する方法_0

設定した5つのコルーチンが全て完了すると第3引数の完了コールバックが呼ばれます。

このように 複数のコルーチンの終了を簡単に待機 できるようになりました。

ParallelCoroutineを理解するためには、コルーチンについての理解は必須。
次の記事ではコルーチンについて詳しく解説しました。ぜひ読んでみてください。

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

ParallelCoroutineの詳しい使い方

ParallelCoroutine.Execute(  
    コルーチンを実行するMonoBehaviour,  
    コルーチンリスト,  
    完了時に呼びたいAction(デフォルト引数 null

ポイントは、第一引数にコルーチンを呼び出す MonoBehaviour インスタンスを設定します。MonoBehaviourを継承したクラス内で使う場合は、thisを指定することが多いでしょう。

ParallelCoroutineキャンセル方法

気になるコルーチンのキャンセル方法です。

var result = ParallelCoroutine.Execute(this, list);  
result.StopCoroutine();  

Executeメソッドの戻り値対して、StopCoroutineメソッドを実行するとコルーチンは全て止まります。

またコルーチンの実行者、このサンプルではthisのGameObjectが非アクティブにしても全てのコルーチンは止まります。

ParallelCoroutine.Execute(this, list);  
gameObject.SetActive(false);  

↑ソースコードで表現すると
こんな感じです。

ParallelCoroutineのインストール方法

そんな便利なParallelCoroutineのインストール方法を解説します。UPM(Unity Package Manager) に対応しています。

Window > Package ManagerからコチラのリポジトリURLを追加して下さい。
https://github.com/baobao/ParallelCoroutine.git

まとめ : ParallelCoroutineで並列コルーチンの待機できます

記事の内容を簡単にまとめます。

並列コルーチンまとめ
  • ParallelCoroutineを使うと並列実行コルーチンの待機可能
  • ParallelCoroutineはキャンセルも簡単
  • UPMで簡単インストール

こんな感じです。

非同期処理を使うならUniTaskが第一候補。
ただUnity初心者はコルーチンから入る方がトラブルは少ないと思いますし、学習効率も良いと思います。

オオバ
オオバ
コルーチンに慣れたらUniTaskにチャレンジがオススメ

また長年運用しているタイトルはコルーチンを引き続きこれからも使うことになるでしょう。

並列コルーチンのコードをスッキリさせたい時にParallelCoroutineを試してもらえればと思います。
👉 ParallelCoroutine - Githubはコチラをクリック

ところで、ツール開発をしているとEditモード中にコルーチンを実行させたくなります。通常コルーチンはUnity実行中のみ動きます。しかし Editor Coroutinesを使うとEditモード中にコルーチンが動作する のです。ぜひ次の記事をあわせて読んでみてください。

「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!

最後まで読んでいただきありがとうございました!
すばらしいコルーチンライフをお過ごしください。

オススメ記事
検証環境