当两个协同程序运行时,你如何停止第一个协同程序?
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");
}
}
答案 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;
}
}