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
廣告