[Unity] コルーチンがなぜか途中で停止するときの確認箇所

ヨメレバCSS

なんていうかあいつ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把握してないと変な罠になってしまいそうなポイントです。

スポンサーリンク
GoogleAdSence レクタングル(大)

コメント

  1. 通りすがり より:

    参考になればですが、
    コルーチンを実行するための永続的に保持されるGameObjectを作り、
    そのオブジェクトからコルーチンを実行すれば、
    ゲームオブジェクトそのものが停止してもコルーチンは継続して実行できます。

    StartCoroutine (SampleRoop ());

    これを停止させたくない!という場合は
    シングルトンの要素を持ち合わせた「CoroutineManager.cs」※MonoBehaviour継承
    を作り、

    CoroutineManager.instance.StartCoroutine (SampleRoop ());

    のようにすれば非Activeでもコルーチンは停止しなくなります。

    • かげろ かげろ より:

      おお、そうですね、コルーチン用の永続的なGameObjectを用意して、それから実行してやるのが解決になりますね。
      ありがとうございます!