なんていうかあいつStartCoroutineしたGameObjectが非アクティブになったら停止するっぽい。
アクティブに戻しても再開しないっぽい。
エディタで適当に
public class RoopSample : MonoBehaviour { // Use this for initialization void Start () { StartCoroutine (SampleRoop ()); } IEnumerator SampleRoop() { int count = 0; while (true) { count++; Debug.Log ("roop: " + count); yield return null; } } // Update is called once per frame void Update () { } }
こんな感じのクラスをつくってGameObjectに貼り付けて、実行しながらそのオブジェクトをActive/非Activeと切り替えてやるとよくわかります。
実質マルチスレッドみたいに扱っているものだから、依存してるGameObject把握してないと変な罠になってしまいそうなポイントです。
コメント
参考になればですが、
コルーチンを実行するための永続的に保持されるGameObjectを作り、
そのオブジェクトからコルーチンを実行すれば、
ゲームオブジェクトそのものが停止してもコルーチンは継続して実行できます。
StartCoroutine (SampleRoop ());
これを停止させたくない!という場合は
シングルトンの要素を持ち合わせた「CoroutineManager.cs」※MonoBehaviour継承
を作り、
CoroutineManager.instance.StartCoroutine (SampleRoop ());
のようにすれば非Activeでもコルーチンは停止しなくなります。
おお、そうですね、コルーチン用の永続的なGameObjectを用意して、それから実行してやるのが解決になりますね。
ありがとうございます!
[…] 「[Unity] コルーチンがなぜか途中で停止するときの確認箇所 」に書いてあるとおりですが、ログを出して確認してみました。 Unity2017.2.1です。 […]