在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 :(得分:2)
正如hvd所写,你将isPlayerTurn设置为true。 当你启动coroutine当前方法没有停止,但是它在paralel中执行下一个语句到coroutine中的方法。
在这里,您将看到coroutine如何统一工作的示例:The Unity3D StartCoroutine calls a function, when does that function return?