为什么协程会改变变量的值?
在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
是否有这种行为的原因或者是逻辑错误?
正如hvd写你设置isPlayerTurn为true。 当你启动协程时,当前方法不会停止,但它会在并行中执行下一个语句到协程中的方法。
在这里你可以看到协同工作是如何工作的:Unity3D StartCoroutine调用一个函数,函数何时返回?
链接地址: http://www.djcxy.com/p/53173.html上一篇: Why does the coroutine changes the value of a variable?