📜  Unity-协程

📅  最后修改于: 2020-10-29 04:20:52             🧑  作者: Mango


在Unity中制作游戏时,协程是最有用的工具。让我们考虑下面显示的代码行,以了解协程的全部含义。

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

通常,如果您在Unity(或C#,实际上)中调用函数,则该函数将自始至终运行。就代码而言,这就是您认为的“正常”行为。但是,有时我们想要故意降低某个函数的速度或使其等待的时间比其运行的瞬间持续时间更长。协程具有以下功能:协程是一种能够等待计时其过程以及完全暂停其函数。

让我们考虑一个示例,以了解协程的工作原理。假设我们要制作一个正方形,以1秒为间隔在红色和蓝色之间更改其颜色。

首先,我们创建一个精灵。接下来,创建一个新脚本,并将其命名为ColorChanger 。在此脚本中,我们获得了对Sprite的Sprite Renderer的引用。但是,我们将使用另一种获取组件的方式。与其像到目前为止那样将组件拖放到插槽中,我们不要求代码检测组件本身。

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

请记住,渲染器负责使精灵实际上在屏幕上可见。渲染器的颜色属性会影响子画面的全局颜色。这是要修改的值。公开颜色值将使我们能够通过操作系统默认颜色选择程序中的编辑器来选择它们。

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent();
   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暂停脚本并继续下一帧的原因。

有很多方法可以用来产生收益。其中之一是创建WaitForSeconds类的实例。这使得协程在继续运行之前要等待一定数量的实际秒数。

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

协程已广泛用于定时方法,就像我们刚才那样。各种各样的WaitForX方法都有自己的用途。协程还用于在游戏同时运行时自行运行的“侧面”流程。例如,这在播放器从一点开始加载时加载较大级别的屏幕外部分很有用。

协程