こんにちは、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"));
これを実行すると以下のようなログが出力されます。
設定した5つのコルーチンが全て完了すると第3引数の完了コールバックが呼ばれます。
このように 複数のコルーチンの終了を簡単に待機 できるようになりました。
ParallelCoroutineを理解するためには、コルーチンについての理解は必須。
次の記事ではコルーチンについて詳しく解説しました。ぜひ読んでみてください。
👉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初心者はコルーチンから入る方がトラブルは少ないと思いますし、学習効率も良いと思います。
また長年運用しているタイトルはコルーチンを引き続きこれからも使うことになるでしょう。
並列コルーチンのコードをスッキリさせたい時にParallelCoroutineを試してもらえればと思います。
👉 ParallelCoroutine - Githubはコチラをクリック
ところで、ツール開発をしているとEditモード中にコルーチンを実行させたくなります。通常コルーチンはUnity実行中のみ動きます。しかし Editor Coroutinesを使うとEditモード中にコルーチンが動作する のです。ぜひ次の記事をあわせて読んでみてください。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいコルーチンライフをお過ごしください。
- Unity2020.3.19f1
- ParallelCoroutine v1.0.0