如何停止合作?

时间:2014-08-08 12:54:24

标签: c# unity3d coroutine

当两个协同程序运行时,你如何停止第一个协同程序?

GLOBALS.stableTime = 5;

IEnumerator StableWaittingTime ()
{
        yield return new WaitForSeconds (1f);
        if (GLOBALS.stableTime == 0) {
                GameManager.instance.LevelFaildMethod ();
        } else {
                GameManager.instance.stableWaittingTime.text = GLOBALS.stableTime.ToString ();
                GLOBALS.stableTime--;
                StartCoroutine ("StableWaittingTime");
        }
}

2 个答案:

答案 0 :(得分:3)

有三种方法可以阻止协同程序。首先是调用StopAllCoroutines。第二个是调用StopCoroutine。第三是在协程中做一个完整的休息。

StopAllCoroutines停止所有协同程序,StopCoroutine停止所有带有名称的协同程序,并且yeild break停止该协同程序。值得注意的是StopAllCoroutine和StopCoroutine只能在协程达到收益率返回时停止协同程序。

因此,如果您有两个具有相同名称的协同程序,并且您想要停止正在执行的协同程序,那么请执行中断。有趣的是,如果你想要停止其他协程而不是正在执行的协程,你可以从该协程中调用StopCoroutine。

答案 1 :(得分:1)

@ Imapler 答案几乎就是您所需要的。我只想补充StopCoroutine MonoBehaviour方法被重载并且有3种类型的参数,因此可以停止许多同名的协同程序。 根据您的需要,只需使用yield break;像这样:

void Start () 
{
    StartCoroutine (StableWaittingTime ());
}

IEnumerator StableWaittingTime ()
{
    yield return new WaitForSeconds (1f);
    if (false) 
    {
        // do something
    } 
    else 
    {
        // do something
        StartCoroutine (StableWaittingTime ());
        yield break;
    }
}