在 Unity 中使用鼠标移动刚体的问题

Issue with moving rigidbody using mouse in Unity

我有一个刚体,我想用 Input.GetAxisRaw 鼠标移动它。
我知道 Input.GetAxis 与帧率无关,但在我的例子中,它在较低的帧率下开始移动得更快。我怀疑是因为 Rigidbody.MovePosition 因为当我直接设置位置时它不会发生。将鼠标输入除以 Time.DeltaTime 确实解决了这个问题,但我不确定这是否是一个好的解决方案。此外,我不确定这是否与当帧率非常高(~1000)时输入开始变得非常不稳定有关,并且输入灵敏度在不同的 pc 上可能会大不相同。
我的游戏是 2d 俯视图。
这是我的代码:

private void Update()
{
    mouse_movement = GetMouseMovement();
}

private void FixedUpdate()
{
    Vector3 new_position = transform.position + mouse_movement;
    rigidbody.MovePosition(new_position);
}

public Vector3 GetMouseMovement()
{
    Vector3 mouse_movement = new Vector3(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
    return mouse_movement * MouseSensitivity;
}

提前致谢。

  1. 如果 FPS 过高,您可以 set target framerate

  2. 你在更新中得到你的输入,并在固定更新中应用它。这意味着,鼠标位置每帧采样一次,但随后在帧之间应用多次 - 在 FixedUpdate 上。所以你依赖于帧率。要真正独立于帧率,也要在 FixedUpdate 中进行输入检查。或者在更新中移动您的对象,将值乘以 Time.deltaTime。只是不要混用 Update 和 FixedUpdate。

  3. 您获得鼠标在屏幕上的位置。这意味着,您也依赖于分辨率。有两种修复方法:将鼠标位置转换为世界space,或者根据屏幕大小计算鼠标移动的百分比:

    移动X = Input.GetAxisRaw("Mouse X") / Screent.width;