【发布时间】:2016-06-20 16:32:30
【问题描述】:
在 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 在该 yield 之后,
isPlayerTurn的值仍应为False,因为它是通过ShowPattern()函数所必需的,并且仅在ShowPattern()完成执行后才应为True(在//等部分)。 -
我不是在问你为什么希望它是
false,我是在问你为什么认为当前的代码会保留它false。 -
因为我认为
isPlayerTurn = true;只会在ShowPattern()完成后执行。 -
您可以在您的
Debug.Log调用中添加一些标识符(类似于Debug.Log("Update " + isPlayerTurn),这样您就可以准确地知道哪个调试输出是哪个。