【问题标题】:Problems with calling the same Coroutine two consecutive times in Unity3dUnity3d连续两次调用同一个协程的问题
【发布时间】:2016-04-22 13:19:30
【问题描述】:

我正在尝试使用Coroutines 旋转魔方的平面,这是我的代码:

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);
    }
}

但是当我尝试像这样连续两次调用协程时

StartCoroutine(RotateUpperFacecw());
StartCoroutine(RotateUpperFacecw());

它给出了错误的结果。

我尝试调用第一个,等待一秒钟然后再次调用它,它很好,但我不明白,(yield return 0)不应该阻塞执行直到这个协程结束?

我错过了什么?

【问题讨论】:

    标签: c# unity3d coroutine


    【解决方案1】:

    yield return 0yield return false 相同,等待一帧

    【讨论】:

    • 那我应该怎么等到这个协程结束呢?
    • 我不知道任何开箱即用的方法,我认为您可以以某种方式测量完成和使用 yield return new waitforseconds 所需的时间
    • 或者你可以“yield return StartCoroutine(RotateUpperFacecw());”应该可以工作,但您必须将调用方法设为 IEnumerator 并将其作为协程启动
    • 谢谢!我使用了一个带有 yield return new waitforseconds 的标志,它工作得很好! :D
    【解决方案2】:

    第二个协程调用不会等待第一个完成,在某些时候它们会同时运行,都尝试旋转对象。您可以在第一次调用中第二次调用,但您需要一个布尔值或其他东西以避免无限期调用。

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      相关资源
      最近更新 更多