我有用于旋转玩家和相机的代码,当我构建游戏时,旋转速度更快。
我猜这是因为 Time.deltatime 乘法,但是当我不将这些值与 deltatime 相乘时,构建中的控制器旋转速度会变慢(尽管 _rotationVelocity 值在构建和编辑器中是相同的)。
你知道我是否应该乘以增量时间吗?如果不这样做,为什么操纵杆和鼠标输入的旋转不一致?谢谢:)
这是代码:
private void HandleRotation()
{
float scalingFactor = Time.deltaTime;
Vector2 mouseDelta = inputManager.inputActions.Player.CameraRotation.ReadValue<Vector2>();
_cinemachineTargetPitch += -mouseDelta.y * cameraSensitivity * scalingFactor;
_rotationVelocity = mouseDelta.x * cameraSensitivity * scalingFactor;
// clamp our pitch rotation
_cinemachineTargetPitch = ClampAngle(_cinemachineTargetPitch, -maxXRotation, maxXRotation);
// Update Cinemachine camera target pitch
cameraTransform.localRotation = Quaternion.Euler(_cinemachineTargetPitch, 0f, 0f);
// rotate the player left and right
playerTransform.Rotate(Vector3.up * _rotationVelocity);
}
这里的问题是
mouseDelta
(假设它实际上是鼠标增量)已经是一个依赖于帧的值。所以你必须不将mouseDetla
与Time.deltaTime
相乘。乘以 deltaTime
是从基于时间的值到基于帧的值的转换。因此,以米每秒为单位的速度将转换为米每帧。鼠标增量输入表示两帧之间的变化或鼠标位置。
Vector2 mouseDelta = inputManager.inputActions.Player.CameraRotation.ReadValue<Vector2>();
_cinemachineTargetPitch += -mouseDelta.y * cameraSensitivity;
_rotationVelocity = mouseDelta.x * cameraSensitivity;
// [ ... ]
这应该会给你一个恒定的结果。但请注意,这对于 WebGL 构建而言并非如此,因为在浏览器内您会获得一个抽象的鼠标增量,该增量通常与硬件鼠标增量不匹配。您通常需要在浏览器内设置不同的灵敏度。这是一个已知问题,可能与鼠标 API 在浏览器中的工作方式有关。似乎没有一致的行为,即使跨浏览器。 特别是对于 WebGL,强烈建议您为用户添加灵敏度设置并允许足够大的范围。