Unity - 协程

  • 简述

    在 Unity 中制作游戏时,协程是最有用的工具。让我们考虑下面显示的代码行,以了解协程的全部含义。
    
    IEnumerator MyCoroutineMethod() {
       // Your code here…
       
       yield return null;
    }
    
    通常,如果您在 Unity(或实际上是 C#)中调用函数,该函数将从头到尾运行。就您的代码而言,这就是您认为的“正常”行为。但是,有时我们想故意减慢一个函数的速度,或者让它等待比它运行的瞬间持续时间更长的时间。协程能够做到这一点:协程是一个函数,它能够waitingtiming它的过程,以及完全暂停它。
    让我们考虑一个例子来理解协程是如何工作的。假设我们要制作一个正方形,以 1 秒的间隔在红色和蓝色之间改变颜色。
    首先,我们创建一个精灵。接下来,创建一个新脚本,并将其命名ColorChanger. 在这个脚本中,我们得到一个引用Sprite Renderer的精灵。但是,我们将使用不同的方式来获取组件。不像我们目前所做的那样将组件拖放到插槽中,我们将要求代码检测组件本身。
    这是通过GetComponent方法,它返回它检测到的第一个匹配组件。由于我们每个对象只使用一个 Sprite Renderer,因此我们可以使用此方法每次自动检测并获取对我们渲染器的引用。
    请记住,渲染器负责使精灵在屏幕上实际可见。渲染器有一个color影响精灵全局颜色的属性;这是要修改的值。制作Color值 public 将让我们通过操作系统默认颜色选择程序中的编辑器来选择它们。
    
    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 暂停脚本并继续下一帧。
    有很多方法可以用来产生回报;其中之一是创建一个实例WaitForSeconds班级。这使得协程在继续之前等待一定的真实世界秒数。
    让我们编译我们的代码并返回 Unity。我们将简单地选择我们的交替颜色,然后点击播放。我们的对象现在应该以 3 秒的间隔在两种颜色之间切换。您可以将间隔设为公共变量,也可以调整颜色变化的频率。
    协程广泛用于timed方法,就像我们刚刚做的那样。的多样性WaitForX方法有自己的用途。协程还用于运行在游戏同时运行时自行运行的“辅助”进程。这很有用,例如,在播放器从某一点开始时加载大关卡的屏幕外部分。
    协程