Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# 在Unity3d中连续两次调用同一协程时出现问题_C#_Unity3d_Coroutine - Fatal编程技术网

C# 在Unity3d中连续两次调用同一协程时出现问题

C# 在Unity3d中连续两次调用同一协程时出现问题,c#,unity3d,coroutine,C#,Unity3d,Coroutine,我正在尝试使用协同程序旋转魔方的平面,以下是我的代码: IEnumerator RotateUpperFacecw(){ while(Mathf.Abs(totalRotation) < 90f){ totalRotation += 10; Parent.transform.RotateAround(red.transform.position,Vector3.up,10); yield return 0; } if

我正在尝试使用
协同程序旋转魔方的平面,以下是我的代码:

IEnumerator RotateUpperFacecw(){
    while(Mathf.Abs(totalRotation) < 90f){
        totalRotation += 10;
        Parent.transform.RotateAround(red.transform.position,Vector3.up,10);
        yield return 0;
    }

    if(Mathf.Abs(totalRotation)>=90f){
        totalRotation=0;
        Update(UpperFace);
    }
}
它给出了一个错误的结果

我尝试调用第一个,等待一秒钟,然后再次调用,结果很好,但我不明白,(yield return 0)是否应该在这个协同过程结束之前阻止执行


我遗漏了什么?

收益返回0
收益返回false
相同,它等待一个帧

收益返回0
收益返回false
相同,它等待一个帧

第二个协同路由调用不会等待第一个帧完成,在某个时刻它们将同时运行,两人都试图旋转物体。您可以在第一次调用中进行第二次调用,但您需要一个布尔值或其他值来避免无限期调用

第二个协同路由调用不会等待第一个调用完成,在某个时间点,它们将同时运行,同时尝试旋转对象。您可以在第一次调用中进行第二次调用,但您需要一个布尔值或其他值来避免无限期调用

那么,我该如何等到这个协同过程结束呢?我不知道任何现成的方法,我想你可以通过某种方式来衡量完成并使用
yield return new waitforseconds
或“yield return start例程(RotateUpperFacecw());”应该可以工作,但您必须使您的调用方法成为IEnumerator,并将其作为一个协同程序启动!我使用了一个带有yield return new waitforseconds的标志,它工作得非常好!:Dso我该怎么等到这个协同程序结束呢?我不知道任何现成的方法,我想你可以通过某种方式来衡量完成并使用
yield return new waitforseconds
或“yield return start例程(RotateUpperFacecw());”应该可以工作,但您必须使您的调用方法成为IEnumerator,并将其作为一个协同程序启动!我使用了一个带有yield return new waitforseconds的标志,它工作得非常好!:D
StartCoroutine(RotateUpperFacecw());
StartCoroutine(RotateUpperFacecw());