如何停止合作?

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

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

@ Imapler答案几乎就是你所需要的。 我只想补充说MonoBehaviour StopCoroutine方法是重载的并且有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; } } 

有三种方法可以阻止协同程序。 首先是调用StopAllCoroutines。 第二个是调用StopCoroutine。 第三是从协同程序中进行一次彻底的rest。

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

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