为什么协程会改变变量的值?

时间:2016-03-07 07:34:38

标签: c# unity3d

在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

这种行为有原因还是逻辑错误?

1 个答案:

答案 0 :(得分:2)

正如hvd所写,你将isPlayerTurn设置为true。 当你启动coroutine当前方法没有停止,但是它在paralel中执行下一个语句到coroutine中的方法。

在这里,您将看到coroutine如何统一工作的示例:The Unity3D StartCoroutine calls a function, when does that function return?