参考:
コルーチンを使うには、
StartCoroutine(戻り値IENumeratorのメソッド)
と記述する。
StartCoroutine()はMonoBehaviourクラスのメソッドである(Unity - Scripting API: MonoBehaviour.StartCoroutine)。
MonoBehaviour継承クラスは、new クラス名
でインスタンス化することは禁じられている(補足参照)。
通常は、GameObjectにアタッチし、'GetComponent<クラス名>()‘で取得する。
しかし、コルーチンを実行時にインスタンス化して使いたい場合も多々ある。たとえば、指定したURLやパスからデータを読み込むクラスはStartCoroutineが必須になるが、オブジェクトにアタッチして使う必然性はないし、意味的にも混乱する。
この対応策のひとつとして、「インスタンス化するクラスで、MonoBehaviour継承クラスのインスタンスを作る」方法がある。
つまり、StartCoroutine()を使うためだけの、MonoBehaviour継承インスタンスをスクリプトで作成し、そのStartCoroutineを呼ぶ。
例:
public class MyStartCoroutine { public WWW GetWebImageAsByteArray(string imageFilePath) { IEnumerator coroutine = GetWWW(imageFilePath); //StartCoroutineに渡すIENumeratorインスタンス var myMono = new MyMonoBehaviour(); //StartCoroutineを使うためのカスタムクラス myMono.CallStartCoroutine(coroutine); //カスタムクラス内でStartCoroutineを呼ぶメソッド return www; } //StartCoroutineに渡すIEnumeratorの実装 private IEnumerator GetWWW(string url) { www = new WWW(url); yield return www; } } //StartCoroutine()メソッドを使うために定義したMonoBehaviour継承クラス public class MyMonoBehaviour : MonoBehaviour { public void CallStartCoroutine(IEnumerator iEnumerator) { StartCoroutine(iEnumerator); //ここで実際にMonoBehaviour.StartCoroutine()を呼ぶ } }
(補足)
実際には、フィールドなどの定義に不足・矛盾がなければ、MonoBehaviour継承クラスを'new …‘でインスタンス化しても、(警告はでるが)ビルドは通る。が、あまりよい使い方ではない。