How to stop co-routine?

后端 未结 2 1592
野的像风
野的像风 2020-12-20 23:54

When two co-routines are running, how do you stop the first co-routine?

GLOBALS.stableTime = 5;

IEnumerator StableWaittingTime ()
{
        yield return new         


        
相关标签:
2条回答
  • 2020-12-21 00:42

    There are three ways to stop coroutines.

    1. The first is to call StopAllCoroutines(), which will obviously stop all running coroutines.
    2. The second is to call StopCoroutine(coroutine), where coroutine is a variable name given to your IEnumerator.
    3. And the third is to do a yield break from within the coroutine.

    Worth noting is that both StopAllCoroutines and StopCoroutine can only stop a coroutine when the coroutine reaches a yield return *.

    So if you have two coroutines with the same name and you want to stop the one you are executing in you do yield break. Interestingly, if you want to stop every other coroutine besides the one you are executing in, you call StopCoroutines() from within that coroutine.

    0 讨论(0)
  • 2020-12-21 00:45

    @Imapler answer is almost all you need. I would just add that StopCoroutine method of MonoBehaviour is overloaded and has 3 types of parameters, so it is possible to stop many coroutines of same name. For your need here, just use yield break; like this:

    void Start () 
    {
        StartCoroutine (StableWaittingTime ());
    }
    
    IEnumerator StableWaittingTime ()
    {
        yield return new WaitForSeconds (1f);
        if (false) 
        {
            // do something
        } 
        else 
        {
            // do something
            StartCoroutine (StableWaittingTime ());
            yield break;
        }
    }
    
    0 讨论(0)
提交回复
热议问题