构建中的旋转速度比 Unity 中的编辑器更快

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

我有用于旋转玩家和相机的代码,当我构建游戏时,旋转速度更快。

我猜这是因为 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);
    }
c# unity-game-engine input rotation
1个回答
0
投票

这里的问题是

mouseDelta
(假设它实际上是鼠标增量)已经是一个依赖于帧的值。所以你必须
mouseDetla
Time.deltaTime
相乘。乘以
deltaTime
是从基于时间的值到基于帧的值的转换。因此,以米每秒为单位的速度将转换为米每帧。鼠标增量输入表示两帧之间的变化或鼠标位置。

Vector2 mouseDelta = inputManager.inputActions.Player.CameraRotation.ReadValue<Vector2>();

_cinemachineTargetPitch += -mouseDelta.y * cameraSensitivity;
_rotationVelocity = mouseDelta.x * cameraSensitivity;
// [ ... ]

这应该会给你一个恒定的结果。但请注意,这对于 WebGL 构建而言并非如此,因为在浏览器内您会获得一个抽象的鼠标增量,该增量通常与硬件鼠标增量不匹配。您通常需要在浏览器内设置不同的灵敏度。这是一个已知问题,可能与鼠标 API 在浏览器中的工作方式有关。似乎没有一致的行为,即使跨浏览器 特别是对于 WebGL,强烈建议您为用户添加灵敏度设置并允许足够大的范围。

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