2016-09-27 12 views
0

次のように更新()メソッドを使用してたび:デバッグログメッセージこれはアップデートを使用して、終了した後にのみ、コードの大きな塊、()の実行前

void Update() { 
    if (Input.GetMouseButtonDown(0) && useRandomSeed) { 
     Debug.Log("Generating New Map..."); 
     GenerateMap(); 
     Debug.Log("New Map Generated!"); 
    } 
} 

コンソールの出力をプッシュします最初のメッセージと第2のメッセージを(視覚的に)同時に出力する。最初にGenerateMap()が実行されます。 GenerateMap()は、返されるまでに時間がかかる方法です。

期待された何

  • まずデバッグメッセージが印刷されます。
  • コードが実行されます。
  • 2番目のデバッグメッセージが表示されます。

    • コードが実行されます。何が起こった

  • 第1および第2のデバッグメッセージが(順番に)印刷されます。

私はこれやってみました:

void Update() { 
    if (Input.GetMouseButtonDown(0) && useRandomSeed && !mapGenPending) { 
     Debug.Log("Generating New Map..."); 
     mapGenPending = true; 
    } else if (mapGenPending) { 
     GenerateMap(); 
     Debug.Log("New Map Generated!"); 
     mapGenPending = false; 
    } 
} 

をしかし、これはまだ第二ケースが生じました。私は、UnityがサイクルごとにUpdate()内の特定のコードの順序を気にしないかもしれないと考えましたが、2サイクルでもメッセージをコンソールに順番に印刷するには不十分です。

最終的には、これが起こるのを防ぐために、どうやって注文を期待どおりにするのですか?例えば、手続きのためのコルーチンで

+0

これは奇妙なようです。私はこれに直面していない。あなたはまたあなたが質問に出す出力を追加することができますか? –

答えて

0

試してみてください:あなたのGenerateMap法について

private bool generated = false; 

:あなたのクラスの

void Update(){ 
     if (Input.GetMouseButtonDown(0)){ 
       StartCoroutine(LoadMap()); 
     } 
} 

:アップデートで

public IEnumerator LoadMap(){ 
     Debug.Log("Generating New Map..."); 
     GenerateMap();    
     while(generated==false){ 
      yield return new WaitForSeconds(0.1f); 
     } 
     Debug.Log("New Map Generated!"); 
} 

public void GenerateMap(){ 
// 
// 
// 
// 
    generated=true; 
} 

この方法では、New Map Generated!メッセージは、生成時に偽から真に変化するときに表示されます。

+0

これはうまくいかず、何らかの理由で最初のデバッグメッセージは、マップの生成が完了したときにのみ表示されます。コルーチンの内部と外部で発生しているデバッグログメッセージは、プロセスの前に1つ、プロセスの後に1つではなく、(ほぼ)同じタイミングで出力されます。 – AgentM

+0

コードをコルーチンに入れて更新できますか?あなたは気分を誤解していると思います。 –

関連する問題