我的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);
}
我试着改变球员的运动脚本,我也试着改变一些设置的电影摄像机和它的帮助,但没有解决这个问题。
1条答案
按热度按时间qxsslcnc1#
很有可能是因为你混合了Cinemachine的正常更新方法和Unity物理相关的更新方法。
在上图中,您可以清楚地看到,有时主帧将不得不重用物理帧,因为主帧和物理帧的更新速率不同。被重用的帧可能是抖动问题的原因。
解决此问题需要您执行以下两项中的一项(或两项):
1.修改你的相机,使它只渲染物理帧。这样,你的相机就不会渲染同一帧2次。阅读更多关于here的内容。
1.强制你的刚体在主帧之间插值/外推。这样,每当你的相机请求刚体的位置值时,它将返回平滑/预测值,而不是返回最近的物理帧的值(这将是快速/抖动)。阅读更多关于here的信息。