unity3d 使用摄影机跟随时的Cinemachine摄影机抖动

6qftjkof  于 2023-03-30  发布在  Mac
关注(0)|答案(1)|浏览(228)

我的Cinemachine相机在我使用它的内置相机跟随系统时会抖动。我知道它的Cinemachine,因为如果我禁用相机跟随,一切都很好。这是我的播放器移动的代码

private void FixedUpdate()
    {
        MousePos = Camera.ScreenToWorldPoint(Input.mousePosition);
        MouseRot = MousePos - rb.position;
        MouseAngle = Mathf.Atan2(MouseRot.y, MouseRot.x) * Mathf.Rad2Deg + 180;
        rb.rotation = MouseAngle;
        if(Input.GetAxisRaw("Vertical") == 1)
        {
            Move(Accelaration, Deccelaration, MaxSpeed);
        }
    }

    private void Move(float acceleration, float deceleration, float maxSpeed)
    {
        rb.AddForce(acceleration * MouseRot.normalized);
        float SpeedVector = Mathf.Sqrt(Mathf.Pow(rb.velocity.x, 2) + Mathf.Pow(rb.velocity.y, 2));
        rb.velocity = Vector2.ClampMagnitude(rb.velocity, maxSpeed);
    }

我试着改变球员的运动脚本,我也试着改变一些设置的电影摄像机和它的帮助,但没有解决这个问题。

qxsslcnc

qxsslcnc1#

很有可能是因为你混合了Cinemachine的正常更新方法和Unity物理相关的更新方法。

在上图中,您可以清楚地看到,有时主帧将不得不重用物理帧,因为主帧和物理帧的更新速率不同。被重用的帧可能是抖动问题的原因。

解决此问题需要您执行以下两项中的一项(或两项):

1.修改你的相机,使它只渲染物理帧。这样,你的相机就不会渲染同一帧2次。阅读更多关于here的内容。

1.强制你的刚体在主帧之间插值/外推。这样,每当你的相机请求刚体的位置值时,它将返回平滑/预测值,而不是返回最近的物理帧的值(这将是快速/抖动)。阅读更多关于here的信息。

相关问题