結束協同程式

通常,當符合某些目標時,你會設計協同程式以自然結束。

IEnumerator TickFiveSeconds()
{
    var wait = new WaitForSeconds(1f);
    int counter = 1;
    while(counter < 5)
    {
        Debug.Log("Tick");
        counter++;
        yield return wait;
    }
    Debug.Log("I am done ticking");
}

為了從協同程式的內部停止協同程式,你不能簡單地返回,因為你將從普通函式中提前離開。相反,你使用 yield break

IEnumerator ShowExplosions()
{
    ... show basic explosions
    if(player.xp < 100) yield break;
    ... show fancy explosions
}

你還可以強制指令碼啟動的所有協同程式在完成之前停止。

void OnDisable()
{
    // Stops all running coroutines
    StopAllCoroutines();
}

從呼叫者停止特定協程的方法取決於你啟動它的方式。

如果你通過字串名稱啟動了一個協同程式:

StartCoroutine("YourAnimation");

那麼你可以通過使用相同的字串名稱呼叫 StopCoroutine 來阻止它 :

StopCoroutine("YourAnimation");

或者,你可以保持一個參考或者由協同程式方法,返回的 IEnumerator 通過 StartCoroutine 返回的 Coroutine 物件,並呼叫 StopCoroutine 在任的那些:

public class SomeComponent : MonoBehaviour 
{
    Coroutine routine;

    void Start () {
        routine = StartCoroutine(YourAnimation());
    }

    void Update () {
        // later, in response to some input...
        StopCoroutine(routine);
    }

    IEnumerator YourAnimation () { /* ... */ }
}