2017-02-07 8 views
0

を得ていないが、私はコルーチンを使用しようとしています私のコードです:- ここで予想される出力

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class NewBehaviourScript : MonoBehaviour { 

    void Update(){ 
     StartCoroutine (Test()); 
     print ("in update"); 
    } 

    IEnumerator Test() 
    { 
     for(int i=0;i<1000;i++) 
     { 
      print(i); 
      yield return null; 
     } 
    } 
} 

私はちょうど機能がコルーチンを使用して対のアップデートでどのように動作するか、通常の違いをチェックしたいです。私はコルーチンがローカル変数の値を保持していると読んでいます。しかし、私は奇妙な出力を得ています。

See the image for output

+0

私の答えが問題をうまく解決したかどうかを教えてください。また、StartCoroutine()で[Unity docs](https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html)を読むことを検討してください。よく説明されている使用例をいくつか挙げてください。 – Serlite

+0

こんにちは。あなたはSerliteの寛大な答えに目を向ける必要があります。 Coroutinesの "documentation"ページは悪くないhttp://stackoverflow.com/documentation/unity3d/3415/coroutines#t=201702071124331182704 – Fattie

答えて

4

あなたはすべてUpdate()コール新しいコルーチンを開始しています。結果として、Test()のインスタンスがますます並行して実行されるようになり、それらはすべて繰り返しの異なるポイントに置かれます。そのため、ログはすべてのフレーム(0、0、1、0 1 2、0 1 2 3など)

それは一度だけ開始されるように、あなたがやるべきことは、代わりにあなたのUpdate()方法のごStart()方法からコルーチンを開始します

void Start(){ 
    StartCoroutine (Test()); 
} 

void Update(){ 
    print ("in update"); 
} 

・ホープ、この助けて!ご質問がある場合はお知らせください。

+0

ありがとうございました...あなたはとてもうまく説明しました。@Serlite –

関連する問題