Unity の MonoBehaviour と Coroutine

やってみて当たり前だと気づいたのですが、StartCoroutine を使うには、MonoBehaviour を継承している必要があります。

つまり、これはダメ

public class MyAwesomeClass {
  void BestMethodEver() {
    StartCoroutine(SomeCoroutine());
  }
}

どうしても使いたかったら、ちゃんと MonoBehaviour を継承するか、

public class MyAwesomeClass : MonoBehaviour {
  void BestMethodEver() {
    StartCoroutine(SomeCoroutine());
  }
}

StartCoroutine を呼ぶ依代を探します。

public class MyAwesomeClass {
  void BestMethodEver() {
    Yorishiro yorishiro = GameObject.Find("Yorishiro").GetComponent<Yorishiro>();
    yorishiro.StartCoroutine(SomeCoroutine());
  }
}

Unity は、シングルスレッドでの動作が基本で、Coroutine もシングルスレッドで動作します(ちょうど、Node のような感じ)。StartCoroutine で呼び出せば、ちゃんとゲームループと同じメインスレッドで動いてくれるので、自分で Coroutine を実装するよりは、↑のような方法で解決するほうが良さそうです。