[Unity] 常に使えるグローバルなコルーチンを用意する

お世話になっております。
しゃまとんです。

Unityにはコルーチンという機能がありますが、GameObjectがInActiveな場合使うことができません。
自分自身がアクティブでも親がInActiveであれば、同様の状態になります。

例えば、ある画像を表示前にロードして切り替えておきたい…みたいなことがあるとします。
ただSpriteを差し替える対象のImageのゲームオブジェクトはfalseになっていてStartCoroutineできない。。。といった状況になるかもしれません。

基本的には自分の管理下でコルーチン制御するほうがいいと思うのですが、こういう場合にグローバルなコルーチンを作っておくことでそちらに処理を移譲することができます。

コードはこんな感じです。
ただ実行したいIEnumratorをもらって実行するだけです。

このクラスはシングルトンで一度生成したら以降はずっと使えるようにしました。なるべくnewしたくないので。
呼び出し側の例はこういう感じで。

今回はサンプルで汎用的なダイアログを作って、シングルトンで使いまわすの想定して実装してみました。(ここでは処理は抜粋しています)
staticメソッド内でプレハブからインスタンス生成するのですが、StartCoroutineは使えないため処理を移譲しています。

今回のサンプルは下記URLに置いておきました。
https://github.com/shamaton/GlobalCoroutine
確認動作させたものはこちらです。

どうにもならんときに使えるかもです。
以上です。

■ 参考
コルーチンを呼び出し元とは別のオブジェクトで動作させる方法