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
是否有原因的行为或者是一个逻辑错误?
*它*不会改变'isPlayerTurn',*你*的变化'isPlayerTurn'。改变它的代码就在你的问题中。你能否通过解释你期望的行为来澄清,为什么? – hvd
@hvd'isPlayerTurn'的值在该yield之后仍然应该是'False',因为它通过'ShowPattern()'函数是必需的,并且只有在ShowPattern()完成执行后才能成为True。部分)。 –
我不是问为什么你想要它是'假',我问你为什么认为当前的代码会保持'假'。 – hvd