2016-03-07 67 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

回答

相关问题