こんにちわ、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の詳しい使い方

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で並列コルーチンの待機できます

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

こんな感じです。

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

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

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

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


フォローすると UIデザイナー力の上がるTwitter やってます!
今日から使えるテクニックを発信中。
ぜひフォローしてみてください!
👉フォローはこちら!

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

オススメ記事
検証環境