Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何停止合作?_C#_Unity3d_Coroutine - Fatal编程技术网

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()
    ,这显然会停止所有正在运行的coroutines
  • 第二种方法是调用
    StopCoroutine(coroutine)
    ,其中
    coroutine
    是为
    IEnumerator
    指定的变量名
  • 第三种方法是在协同程序中进行
    收益率中断
  • 值得注意的是,StopAllCorroutine和StopCorroutine都只能在Corroutine达到
    收益率时停止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成员的包装类)。从主循环中升起此标志,并在协程循环中检查此标志,并在升起该标志时执行产量中断。