2016-03-07 33 views
0

在Unity C#中,我使用協程在x秒後使用「yield return new WaitForSeconds(1.5f)」行在屏幕上顯示一個簡單模式,但在第一次調用它之後,它將isPlayerTurn從false更改爲true。協程爲什麼更改變量的值?

 void Update() { 
     if (!isPlayerTurn) { 
      pattern.Add (Random.Range (1, 5)); 
      Debug.Log (isPlayerTurn); 
      StartCoroutine(ShowPattern()); 
      isPlayerTurn = true; 

     } 

     pointGUI.GetComponent<UnityEngine.UI.Text>().text = "Points: " + playerPoints; 
    } 

    private IEnumerator ShowPattern() { 
     Debug.Log (isPlayerTurn); 
     yield return new WaitForSeconds (1.5f); 
     Debug.Log (isPlayerTurn); 

     // etc 
    } 

日誌的輸出是

False 
False 
True 

是否有原因的行爲或者是一個邏輯錯誤?

+0

*它*不會改變'isPlayerTurn',*你*的變化'isPlayerTurn'。改變它的代碼就在你的問題中。你能否通過解釋你期望的行爲來澄清,爲什麼? – hvd

+0

@hvd'isPlayerTurn'的值在該yield之後仍然應該是'False',因爲它通過'ShowPattern()'函數是必需的,並且只有在ShowPattern()完成執行後才能成爲True。部分)。 –

+0

我不是問爲什麼你想要它是'假',我問你爲什麼認爲當前的代碼會保持'假'。 – hvd

回答

相關問題