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

问题描述 投票:1回答:1

我有一个刚体,我想用鼠标用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;
}

提前感谢。

c# unity3d game-physics game-development
1个回答
0
投票
  1. 如果您的FPS太高,您可以set target framerate

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

  3. 您将鼠标放在屏幕上。这意味着,您还取决于分辨率。有两种解决方法:将鼠标位置转换为世界空间,或根据屏幕尺寸计算鼠标移动的百分比:

    movementX = Input.GetAxisRaw(“ Mouse X”)/ Screent.width;

© www.soinside.com 2019 - 2024. All rights reserved.