Unity协程是一个老生常谈的知识点了,但今天博主却差点被一篇文章忽悠了
那就是这句话:
为什么说这句话不对呢
那就是当遇到while时,我们再来检验这句话的正确性:
按上面那句话,应该每次yield return后,都会跳到StartCoroutine,去执行 print(111);
会无限次的执行Start里的方法。
代码语言:javascript复制private void Start()
{
StartCoroutine(CalculateFramesPerSecond());
print(111);
}
private IEnumerator CalculateFramesPerSecond()
{
while (true)
{
yield return new WaitForSecondsRealtime(1.0f);
print(222);
}
}
但实际是这样嘛?
实际只输出了:
代码语言:javascript复制111
222
222
222
...
我们在做测试时也会发现,只有第一次执行了print(111),后面便不再执行了,后面每次都循环while里的内容。
那为什么会这样呢?实际上是:
yield return是等待的意思,当程序执行到yield return时,会先不执行下面的程序。返回去执行未执行完的程序。
当程序觉得等够了时间,诶,程序就回来执行yield return后面的东西了。
yield return并不是返回到StartCoroutine,yield return是等待。
大家还有什么问题,欢迎在下方留言!