如何停止共同作息
本文关键字:何停止 | 更新日期: 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");
}
}
有三种方法可以停止协同程序。
- 第一个是调用
StopAllCoroutines()
,这显然会停止所有正在运行的协程。第二个是调用StopCoroutine(coroutine)
,其中coroutine
是给IEnumerator
的变量名。 - 第三个是在协程中执行
yield break
。
值得注意的是,StopAllCoroutines和StopCoroutine都只能在协程达到yield return *
时停止协程。
所以如果你有两个名字相同的协程,你想停止你正在执行的一个,你做yield break
。有趣的是,如果你想停止除你正在执行的协程之外的所有其他协程,你可以在该协程中调用StopCoroutines()
。
@ imappler 答案几乎是所有你需要的。我只想补充一点,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;
}
}