如何停止共同作息

本文关键字:何停止 | 更新日期: 2023-09-27 18:17:02

当两个协同例程正在运行时,如何停止第一个协同例程?

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");
        }
}

如何停止共同作息

有三种方法可以停止协同程序。

  1. 第一个是调用StopAllCoroutines(),这显然会停止所有正在运行的协程。第二个是调用StopCoroutine(coroutine),其中coroutine是给IEnumerator的变量名。
  2. 第三个是在协程中执行yield break

值得注意的是,StopAllCoroutines和StopCoroutine都只能在协程达到yield return *时停止协程。

所以如果你有两个名字相同的协程,你想停止你正在执行的一个,你做yield break。有趣的是,如果你想停止除你正在执行的协程之外的所有其他协程,你可以在该协程中调用StopCoroutines()

@ imappler 答案几乎是所有你需要的。我只想补充一点,MonoBehaviourStopCoroutine方法是重载的,并且有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;
    }
}