如何在Unity更新中使用协程来等待秒来旋转相机?(c#)

本文关键字:旋转 等待 相机 Unity 更新 | 更新日期: 2023-09-27 18:02:28

这是我的一部分代码:

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度。(例如,玩家击中敌人)几秒钟后,镜头转回到原来的位置。

在我的代码中,第一部分是OK的,它按照我想要的方式转动,但是当协程部分来的时候,它开始转动,但是它是滞后的,而且它不光滑。

我不知道。还有别的办法吗?

如何在Unity更新中使用协程来等待秒来旋转相机?(c#)

我猜它是滞后的,因为你调用了很多次。在Update()中,你每秒调用函数CameraFlip()多次。

你可以做的就是创建一个bool变量,就像这样:

private bool testingFlip = false;

然后在需要的时候检查一下,例如:

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

在某些情况下,你又把它设为假,以便在需要的时候使用它。这并不奇怪,但这是一个很好的方法来测试这是否是导致延迟的原因。