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

Unity鼠标控制相机旋转出现抖动问题求解决(附代码)

解决Unity鼠标控制相机旋转抖动问题

你的代码存在几个核心问题导致相机抖动:

  1. 每次直接用Input.GetAxis("Mouse X")的瞬时值覆盖相机旋转,没有累积旋转量,导致相机无法保持连续的旋转状态,出现跳变
  2. 定义了rotX变量但未实际使用,且错误引入了键盘输入Horizontal,和鼠标旋转逻辑无关
  3. 直接赋值localEulerAngles时,没有保留相机原本的Y、Z轴旋转状态(虽然你设为0,但逻辑上应该基于当前旋转叠加)

修复后的代码

using UnityEngine;

public class RotateCamera : MonoBehaviour
{
    public Camera targetCamera;
    public float turnSpeed = 4.0f;
    private float currentRotX;

    private void Update()
    {
        // 获取鼠标X轴的增量输入
        float mouseXInput = Input.GetAxis("Mouse X");
        // 累积旋转角度
        currentRotX += mouseXInput * turnSpeed;
        // 应用旋转到相机(保留Y、Z轴原有角度)
        targetCamera.transform.localEulerAngles = new Vector3(targetCamera.transform.localEulerAngles.x, currentRotX, targetCamera.transform.localEulerAngles.z);
    }
}

关键改动说明

  • 移除了无用的命名空间和变量,简化代码结构
  • 使用currentRotX累积鼠标输入的旋转量,保证旋转的连续性,避免抖动
  • 保留相机原本的X、Z轴旋转状态(如果需要限制X轴旋转,比如上下视角,可以添加类似currentRotX = Mathf.Clamp(currentRotX, -60f, 60f)的代码)
  • 将GameObject类型的相机引用改为Camera类型,更贴合实际使用场景

额外优化建议

  • 如果是控制玩家视角的相机,建议锁定鼠标光标,避免鼠标移出窗口导致的异常:
    private void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }
    
  • 若仍存在轻微抖动,可以尝试将旋转逻辑移到LateUpdate中执行,确保在所有物体更新后再处理相机旋转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:24:18