如何在 Unity 中创建流畅的鼠标移动

流畅的鼠标移动是游戏开发的一个重要方面,有助于改善整体用户体验。 通过实现流畅的鼠标移动,您可以让游戏的摄像头或玩家控制感觉更流畅、响应更灵敏,从而带来精致而身临其境的游戏体验。 在本教程中,我们将逐步介绍如何在 Unity 中设置流畅的鼠标移动,并提供分步说明和 C# 代码示例。 我们还将讨论您希望在游戏中实现此功能的可能原因。

为什么要实现平滑的鼠标移动?

以下是流畅的鼠标移动在游戏中很重要的几个原因:

  • 改善的用户体验: 流畅的控制可以帮助玩家更好地控制自己的行为,这对于沉浸感至关重要,尤其是在第一人称或第三人称游戏中。
  • 增强的精度: 微调鼠标移动可以实现更精确的摄像头控制,这对于射击游戏或任何涉及仔细瞄准的游戏中都至关重要。
  • 精致的外观和感觉: 它使游戏感觉更专业和精致,这对于留住玩家并让他们参与度至关重要。
  • 减少晕动症: 抖动或过于敏感的镜头移动可能会导致玩家不适或晕动症。平滑的鼠标移动有助于降低这种风险。

设置平滑鼠标移动 Unity

让我们了解在 Unity 中创建流畅的鼠标移动的步骤。

步骤 1:创建新脚本

首先,创建一个新的 C# 脚本来控制鼠标移动。您可以将此脚本命名为 MouseLook

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;

    void Start()
    {
        // Lock the cursor in the middle of the screen
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get mouse movement input
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // Invert the Y-axis for a more natural control feel
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // Rotate the camera around the X-axis (up and down)
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // Rotate the player object around the Y-axis (left and right)
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

在此代码中:

  • mouseSensitivity 控制鼠标输入的敏感度。
  • playerBody 代表玩家的变换,它沿 Y 轴旋转以进行鼠标水平移动。
  • xRotation 变量存储当前垂直旋转(上下),并将其限制在 -90 度到 90 度之间以防止过度旋转。
  • 我们将鼠标光标锁定在屏幕的中心,以避免光标移出游戏窗口。

第 2 步:将脚本附加到相机

现在脚本已经准备好了,请转到您的 Unity 场景并将 MouseLook 脚本附加到您的相机(例如,Main Camera 对象)。

然后,通过将玩家对象(通常是角色控制器或代表玩家的空游戏对象)拖到检查器中脚本的 Player Body 字段中来分配 playerBody 字段。

步骤 3:调整鼠标灵敏度

您可以尝试使用 mouseSensitivity 值来实现所需的控制级别。一个好的起点是 100,但您可以根据所需的精度级别将其调高或调低。

步骤 4:处理输入平滑度

为了实现更流畅的移动,您可以对鼠标输入值应用插值。这可确保相机在每一帧之间平稳过渡,而不是从一个位置跳转到下一个位置。以下是如何实现该功能的示例:

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;
    private Vector2 smoothInputVelocity;
    public float smoothTime = 0.1f;
    private Vector2 currentMouseDelta;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get raw mouse input
        Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * mouseSensitivity;

        // Smooth the mouse input
        currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref smoothInputVelocity, smoothTime);

        xRotation -= currentMouseDelta.y * Time.deltaTime;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * currentMouseDelta.x * Time.deltaTime);
    }
}

此更新版本引入了使用 Vector2.SmoothDamp 的平滑处理。smoothTime 变量控制过渡的平滑程度。较低的值使移动更灵敏,而较高的值使移动更慢、更平缓。

步骤 5:测试和微调

编写好脚本后,测试游戏并根据鼠标移动的平滑程度调整灵敏度和平滑度值。您还可以调整夹紧角度以允许更多或更少的相机移动自由度。

结论

通过在 Unity 项目中实现平滑的鼠标移动,您可以通过提供精确流畅的摄像头控制来显著增强玩家体验。本教程将指导您设置基本的鼠标移动系统并使用平滑技术对其进行增强。