unity3d 结束协程

示例

通常,您将协程设计为在达到某些目标时自然终止。

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()
{
    // 停止所有正在运行的协程
    StopAllCoroutines();
}

从调用方停止特定协程的方法因启动方式而异。

如果您通过字符串名称启动了协程:

StartCoroutine("YourAnimation");

那么您可以通过使用相同的字符串名称调用StopCoroutine来停止它:

StopCoroutine("YourAnimation");

或者,你可以保持一个参考或者在IEnumerator由协同程序方法,返回将Coroutine被返回的对象StartCoroutine,并调用StopCoroutine无论是那些对:

public class SomeComponent : MonoBehaviour 
{
    Coroutine routine;

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

    void Update () {
        // 稍后,响应一些输入...
        StopCoroutine(routine);
    }

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