试图理解协程 - 没有获得预期的输出

时间:2017-02-07 02:33:31

标签: c# unity3d coroutine

这是我尝试使用协程的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    void Update(){
        StartCoroutine (Test());
        print ("in update");
    }

    IEnumerator Test()
    {
        for(int i=0;i<1000;i++)
        {
            print(i);
            yield return null;
        }
    }
}

我只是想检查正常函数在更新中的行为与使用协同程序之间的区别。我已经读过coroutines保留其局部变量的值。但我得到了奇怪的输出。

See the image for output

1 个答案:

答案 0 :(得分:4)

您每{{}}}次来电都会开始新的协程。因此,越来越多的Update()实例将并行运行,并且它们都会在迭代中的不同点 - 这就是为什么您的日志填满了不同的原因每帧编号(0,0 1,0 1 2,0 1 2 3等)

您应该做的是从Test()方法而不是Start()方法启动协程,因此它只会启动一次:

Update()

希望这有帮助!如果您有任何问题,请告诉我。