You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D第一人称控制器:圆柱玩家模型旋转异常问题

解决Unity第一人称控制器玩家模型延迟旋转问题

问题根源

你的圆柱玩家模型仅在松开鼠标按键时才更新朝向,核心原因是:

  • 输入处理中使用了冗余的灵敏度乘法(同时用mouseSensitivity和sensX/sensY),若未在Inspector中给sensX/sensY赋值为1,会导致旋转累加异常;
  • Input.GetAxis的平滑处理可能导致输入延迟,表现为松开按键后才触发旋转更新;
  • LateUpdate的执行顺序可能让旋转更新滞后于输入处理。

修复方案

下面是修正后的代码,移除冗余参数并优化输入与旋转逻辑:

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public Camera cam;
    public Transform playerBody;
    public float mouseSensitivity = 100f;
    private float xRotation = 0f;
    private float yRotation = 0f;

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

    private void Update()
    {
        // 获取无平滑的原始鼠标输入,避免延迟
        float mouseX = Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // 计算相机垂直旋转与玩家水平旋转
        xRotation -= mouseY;
        yRotation += mouseX;
        // 限制相机垂直旋转范围,避免过度抬头/低头
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // 实时应用旋转
        cam.transform.localRotation = Quaternion.Euler(xRotation, 0, 0);
        playerBody.transform.localRotation = Quaternion.Euler(0, yRotation, 0);
    }
}

关键优化点

  • 使用Input.GetAxisRaw:直接获取原始输入值,无内置平滑处理,确保鼠标移动时旋转实时响应;
  • 移除冗余参数:删除sensX、sensY和multiplier,统一用mouseSensitivity控制灵敏度,减少配置错误;
  • 迁移至Update方法:保证每帧实时处理输入并更新旋转,避免LateUpdate可能带来的执行顺序延迟。

内容的提问来源于stack exchange,提问作者Holy Hominid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:15:34