C# 如何停止合作?
当两个协同例程运行时,如何停止第一个协同例程C# 如何停止合作?,c#,unity3d,coroutine,C#,Unity3d,Coroutine,当两个协同例程运行时,如何停止第一个协同例程 GLOBALS.stableTime = 5; IEnumerator StableWaittingTime () { yield return new WaitForSeconds (1f); if (GLOBALS.stableTime == 0) { GameManager.instance.LevelFaildMethod (); } else {
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()
,这显然会停止所有正在运行的coroutinesStopCoroutine(coroutine)
,其中coroutine
是为IEnumerator
指定的变量名收益率中断
收益率时停止Corroutine*
因此,如果您有两个同名的协程,并且希望停止正在中执行的一个协程,那么您可以产生中断。
有趣的是,如果您想停止除正在执行的协同程序之外的所有其他协同程序,可以从该协同程序中调用stopcroutines()
。@Imapler答案几乎就是您所需要的。我要补充的是,monobhavior
的stopcroutine
方法是重载的,并且有3种类型的参数,因此可以停止许多同名的协同路由。
根据您的需要,只需使用收益率中断;像这样:
void Start ()
{
StartCoroutine (StableWaittingTime ());
}
IEnumerator StableWaittingTime ()
{
yield return new WaitForSeconds (1f);
if (false)
{
// do something
}
else
{
// do something
StartCoroutine (StableWaittingTime ());
yield break;
}
}
Thnx Impler,但同时两个协同例程都在运行,我想知道第二个协同例程何时启动,在第一个协同例程之前,我想停止,怎么可能?你知道吗?理解你有点困难,但我想你的意思是,首先你启动了一个协同例程,当你启动第二个协同例程时,你想停止第一个协同例程,这是正确的吗?是的,你的理解绝对是正确的,因为我想同时处理4-5个联合例程,所以你能帮我回答我的问题吗?我不使用不同的联合例程,我对所有的联合例程都使用相同的联合例程。另外,你可以将控制标志传递给联合例程(带有bool成员的包装类)。从主循环中升起此标志,并在协程循环中检查此标志,并在升起该标志时执行产量中断。