首页 > 解决方案 > 协程 yield 返回 null

问题描述

这是我的第一个问题..

我学习了如何使用 C# 和 Unity 制作游戏,所以我遇到了Coroutines,我知道这些方法是如何工作的,但有一件事我不明白:

yield return null

例如:

IEnumerator Attack(){
   // Somecode..
   while(true){
   //DoSomething..
   yield return null
}
}

此处已提出此问题:Unity - IEnumerator's yield return null

但我仍然需要更多解释

如果这个问题很愚蠢,请原谅我,但就像我说的那样,我只是在学习。

谢谢你。

标签: c#visual-studiounity3dcoroutine

解决方案


每个游戏都是基于循环的。您可以在简化图中看到此逻辑:

在此处输入图像描述

感谢@Draco18s,这是完整的 Unity 框架逻辑图。

此循环的一次迭代称为“帧”。yield return nullcontinue循环中的关键字一样工作 - 它只是进入下一个游戏循环迭代,即“帧”。

为了更好地理解,让我们创建一个协程,每帧打印当前帧号:

void Awake () {
    StartCoroutine(PrintFrameCount());
}

IEnumerator PrintFrameCount() {
    for (;;) {           
        Debug.Log(Time.frameCount);
        yield return null;
    }
}

这样的协程仅打印当前帧计数的不同值,只能通过在不同帧中打印来更改。

在此处输入图像描述


推荐阅读