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

Unity第一人称角色鼠标上下视角随机90度抖动失控问题求助

第一人称视角上下随机90度抖动问题排查方案
  • 核心问题:旋转对象混淆导致的万向锁异常
    你当前把水平、垂直旋转都直接应用在同一个transform上,这会触发万向锁问题——当垂直旋转接近±90度临界值时,旋转轴逻辑会出现混淆,随机导致视角跳转到90度位置。标准第一人称视角实现需要拆分旋转对象:

    • 水平旋转(左右看):挂在角色根对象的Transform上
    • 垂直旋转(上下看):单独挂在相机的Transform上
  • 代码调整方案
    修改脚本,拆分旋转逻辑到不同对象:

    using UnityEngine;
    
    public class MouseMovement : MonoBehaviour
    {
        public float mouseSensitivity = 200f;
        // 在Inspector面板中拖入你的第一人称相机对象
        public Transform cameraTransform;
    
        float xRotation = 0f;
        float yRotation = 0f;
    
        void Start()
        {
            Cursor.lockState = CursorLockMode.Locked;
        }
    
        void Update()
        {
            if (!InventorySystem.Instance.isOpen)
            {
                float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
                float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
    
                // 处理相机的垂直旋转
                xRotation -= mouseY;
                xRotation = Mathf.Clamp(xRotation, -90f, 90f);
                cameraTransform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
    
                // 处理角色的水平旋转
                yRotation += mouseX;
                transform.localRotation = Quaternion.Euler(0f, yRotation, 0f);
            }
        }
    }
    
  • 额外排查项

    • 检查光标锁定逻辑:打开/关闭Inventory时,是否正确切换Cursor.lockState?如果光标未重新锁定,Mouse Y输入可能出现异常跳变
    • 降低灵敏度测试:把mouseSensitivity调到100左右,排除高灵敏度放大输入噪声的可能
    • 排查其他脚本:确认没有动画、物理类脚本意外修改了相机或角色的旋转值

内容的提问来源于stack exchange,提问作者the jsto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:12:30