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

在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?

下一篇: what is the code generated by nested coroutines