如何在Unity中使用更新内的协同程序等待几秒钟来旋转相机?(C#)

如何在Unity中使用更新内的协同程序等待几秒钟来旋转相机?(C#),c#,android,unity3d,coroutine,C#,Android,Unity3d,Coroutine,这是我代码的一部分: void Update(){ CameraFlip(); } void CameraFlip(){ Quaternion target = Quaternion.Euler (0, 0, 180); cameraTransform.rotation = Quaternion.Slerp (cameraTransform.rotation, target, Time.deltaTime * 4.0f); Debug.Log (c

这是我代码的一部分:

void Update(){
CameraFlip();
}
void CameraFlip(){
        Quaternion target = Quaternion.Euler (0, 0, 180);
        cameraTransform.rotation = Quaternion.Slerp (cameraTransform.rotation, target, Time.deltaTime * 4.0f);
        Debug.Log (cameraTransform.rotation.ToString ());
        StartCoroutine("CameraFlipCoroutine");
    }

    public IEnumerator CameraFlipCoroutine(){
        yield return new WaitForSeconds (Random.Range(6f,12f));
        if (gameIsPlaying == false)
            yield return null;
        Quaternion target = Quaternion.Euler (0, 0, 0);
        cameraTransform.rotation = Quaternion.Slerp (cameraTransform.rotation, target, Time.deltaTime * 4.0f);
        Debug.Log (cameraTransform.rotation.ToString ());
    }
所以我想做的是,如果在更新方法中发生了什么,将相机旋转180个角度。(例如,玩家击中敌人)几秒钟后,摄像机返回到其原始位置

在我的代码中,第一部分是可以的,它按照我的要求转动,但是当协同程序部分出现时,它开始转动,但是它滞后了,而且不平滑


我不知道。还有其他方法吗?

我想它是滞后的,因为您多次调用它。在更新()时,您每秒多次调用函数CameraFlip()

要想知道这是否是问题所在,可以创建一个bool变量,如下所示:

private bool testingFlip = false;
然后在需要时进行检查,例如:

void Update(){
    if (!testingFlip){`       
        CameraFlip();
        testingFlip = true;
    }
}

在某种程度上,当你需要它的时候,你又把它弄错了。这并不奇怪,但它是一种很好的方法,可以测试这是否是导致延迟的原因。

这不好,因为
cameraTransform.rotation=Quaternion.Slerp(cameraTransform.rotation,target,Time.deltaTime*4.0f)此代码需要多次调用才能启动。