2016-06-27 22 views
0

私は関数InvokeRepeating()についての問題を遭遇しましたが、それらは並行して動作しませんでした。 Update()のforループを使用して100 floatの配列を調べ、InvokeRepeating()の数値を1秒ごとに比較します。与えられた数字がUpdate()のそれよりも小さい場合、それはコンソールに表示されます。InvokeRepeatingがアップデートでうまく動作しませんでした

しかし、私が見たたびにコンソールのInvokeRepeating()で99となっています。ここで

void Update() { 
    foreach(int f in test){ 
     target = f; 
     Debug.Log (target); 
    } 
} 

void AccXFunction(int time, float x){ 
    InvokeRepeating ("AccXR", 0.2f, 0.8F); 
} 

void AccXR(){ 
    float tempAccX = float.Parse(
      GameObject.FindGameObjectWithTag("AccX") 
      .GetComponent<Text>() 
      .text); 
    accEvent.AddListener (accXAction); 
    if (tempAccX < 99) { 
     Debug.Log ("Hi, got it, the" + target); 
    } 
    else 
    { 
     Debug.Log ("Func0 " + tempAccX); 
    } 
} 

そして、ここでは、コンソールでの結果である私のコードの一部です:唯一の99ではなく、他の番号0から98まで

答えて

0

Unityは、単一スレッドのみを使用しています。 Updateは0から99まで実行され、終了すると保留中のInvokeRepeatingを行います。 Execution Order

通常のコルーチン更新は、更新関数が返された後に実行されます。コルーチンは、指定されたYieldInstructionが終了するまで、実行(保留)を中断できる関数です。

「同時に」実行する場合は、System.Threading名前空間のクラスを使用する必要があります。しかし、「Unityスレッド」にいない場合、UnityがUIを制御して公開するものに触れることはできません。unity specific threading libraryを見つけて、UIスレッドでコードを再度実行する必要があります。

+0

ありがとうございました!私は本当に彼らが別のスレッドにあると思った。しかし、今私は新しい質問があります:アップデートで大きな計算がある(またはスクリプトがたくさんあり、それぞれに時間がかかります)場合、更新関数はコルーチンをブロックしますか? Unityに大きなプロジェクトがいくつかありますが、彼らは解決策を持っているはずです... – joejoe

+0

アップデートで大きな遅い計算があるとプログラムが遅くなりますが、[統合されたプロファイラ](https: //unity3d.com/learn/tutorials/topics/best-practices/unity-ui-profiling-tools)、どのくらいの減速が発生しているかを確認します。ほとんどの場合、それを修正する方法は、何をしようとしているのかをより効率的に行う方法を見つけ出すことです。 –

+0

私があなたの質問に答えた場合、あなたは答えを受け入れてください –

関連する問題