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
相关产品推荐
相关产品推荐

