繁体   English   中英

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

[英]Issue with moving rigidbody using mouse in Unity

我有一个刚体,我想使用Input.GetAxisRaw用鼠标移动它。
我知道Input.GetAxis与帧率无关,但在我的情况下,它在较低帧率下开始移动得更快。 我怀疑这是因为Rigidbody.MovePosition因为当我直接设置 position 时它不会发生。 将鼠标输入除以Time.DeltaTime确实可以解决此问题,但我不确定这是否是一个好的解决方案。 另外我不确定这是否与当帧速率非常高(~1000)时输入开始变得非常不稳定有关,并且输入灵敏度在不同的电脑上会变得截然不同。
我的游戏是 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 太高而苦苦挣扎,您可以设置目标帧率

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

  3. 您会在屏幕上看到鼠标 position。 这意味着,您也依赖于分辨率。 有两种方法可以解决:将鼠标 position 转换为世界空间,或者将鼠标移动计算为屏幕大小的百分比:

    motionX = Input.GetAxisRaw("鼠标 X") / Screent.width;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM