在 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;
}
提前致谢。
如果 FPS 过高,您可以 set target framerate
你在更新中得到你的输入,并在固定更新中应用它。这意味着,鼠标位置每帧采样一次,但随后在帧之间应用多次 - 在 FixedUpdate 上。所以你依赖于帧率。要真正独立于帧率,也要在 FixedUpdate 中进行输入检查。或者在更新中移动您的对象,将值乘以 Time.deltaTime。只是不要混用 Update 和 FixedUpdate。
您获得鼠标在屏幕上的位置。这意味着,您也依赖于分辨率。有两种修复方法:将鼠标位置转换为世界space,或者根据屏幕大小计算鼠标移动的百分比:
移动X = Input.GetAxisRaw("Mouse X") / Screent.width;
我有一个刚体,我想用 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;
}
提前致谢。
如果 FPS 过高,您可以 set target framerate
你在更新中得到你的输入,并在固定更新中应用它。这意味着,鼠标位置每帧采样一次,但随后在帧之间应用多次 - 在 FixedUpdate 上。所以你依赖于帧率。要真正独立于帧率,也要在 FixedUpdate 中进行输入检查。或者在更新中移动您的对象,将值乘以 Time.deltaTime。只是不要混用 Update 和 FixedUpdate。
您获得鼠标在屏幕上的位置。这意味着,您也依赖于分辨率。有两种修复方法:将鼠标位置转换为世界space,或者根据屏幕大小计算鼠标移动的百分比:
移动X = Input.GetAxisRaw("Mouse X") / Screent.width;