なんていうかあいつ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です。 […]