Unity协程



协程是制作Unity游戏时最有效的工具之一。让我们考虑一下下面所示的代码行,以了解协程的含义。

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

通常,如果您在Unity(或C#)中调用一个函数,该函数将从头到尾运行。就您的代码而言,这就是您认为的“正常”行为。但是,有时我们希望故意减慢函数的速度,或者使其等待的时间长于其运行的极短时间。协程恰好能够做到这一点:协程是一个能够等待计时其过程,以及完全暂停其过程的函数。

让我们考虑一个例子来理解协程是如何工作的。假设我们想制作一个以1秒的间隔在红色和蓝色之间更改其颜色的正方形。

首先,我们创建一个精灵。接下来,创建一个新的脚本,并将其命名为ColorChanger。在这个脚本中,我们获取精灵的Sprite Renderer的引用。但是,我们将使用不同的方法来获取组件。我们不再像以前那样将组件拖放到插槽中,而是让代码自己检测组件。

这是通过GetComponent方法完成的,该方法返回它检测到的第一个匹配组件。由于我们每个对象只使用一个Sprite Renderer,因此我们可以使用此方法自动检测并每次获取渲染器的引用。

请记住,渲染器负责使精灵实际显示在屏幕上。渲染器具有一个color属性,该属性会影响精灵的全局颜色;这是要修改的值。将Color值设置为公共值将允许我们通过操作系统的默认颜色拾取程序在编辑器中选择它们。

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent<SpriteRenderer>();
   StartCoroutine(ChangeColor());
}

IEnumerator ChangeColor() {
   
   while (true) {
      
      if (sr.color == color1)
         sr.color = color2;
      
      else
         sr.color = color1;
      
      yield return new WaitForSeconds(3);
   }
}

现在,我们将协程函数放在一个while循环中。

要在C#中创建协程,我们只需创建一个返回IEnumerator的方法。它还需要一个yield return语句。yield return语句是特殊的;它实际上是告诉Unity暂停脚本并在下一帧继续执行。

可以使用多种方法来yield return;其中一种是创建WaitForSeconds类的实例。这使得协程在继续之前等待一定数量的实际秒数。

让我们编译我们的代码并返回Unity。我们将简单地选择我们的交替颜色,然后点击播放。我们的对象现在应该以3秒的间隔在两种颜色之间切换。您也可以将间隔设置为公共变量,并调整颜色变化的频率。

协程广泛用于计时方法,就像我们刚才所做的那样。各种WaitForX方法有其自身的用途。协程还用于运行“旁支”进程,这些进程在游戏同时运行时自行运行。例如,这对于在玩家从一个点开始时加载大型关卡的屏幕外部分非常有用。

Coroutines
广告