unity3d Coroutines Ending a coroutine


Often you design coroutines to naturally end when certain goals are met.

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

To stop a coroutine from "inside" the coroutine, you cannot simply "return" as you would to leave early from an ordinary function. Instead, you use yield break.

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

You can also force all coroutines launched by the script to halt before finishing.

void OnDisable()
    // Stops all running coroutines

The method to stop a specific coroutine from the caller varies depending on how you started it.

If you started a coroutine by string name:


then you can stop it by calling StopCoroutine with the same string name:


Alternatively, you can keep a reference to either the IEnumerator returned by the coroutine method, or the Coroutine object returned by StartCoroutine, and call StopCoroutine on either of those:

public class SomeComponent : MonoBehaviour 
    Coroutine routine;

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

    void Update () {
        // later, in response to some input...

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