Unity鼠标控制相机旋转出现抖动问题求解决(附代码)
解决Unity鼠标控制相机旋转抖动问题
你的代码存在几个核心问题导致相机抖动:
- 每次直接用
Input.GetAxis("Mouse X")的瞬时值覆盖相机旋转,没有累积旋转量,导致相机无法保持连续的旋转状态,出现跳变 - 定义了
rotX变量但未实际使用,且错误引入了键盘输入Horizontal,和鼠标旋转逻辑无关 - 直接赋值
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
相关产品推荐
相关产品推荐

