围绕角色旋转时Camera画面闪烁问题求助
Unity相机环绕旋转时画面闪烁问题排查与修复
问题根源分析
你的相机闪烁问题主要来自三个代码逻辑错误:
初始偏移计算错误
Start方法里的offset计算逻辑完全错误,正确的相机偏移应该是相机相对于目标的初始位置向量,而非两者位置相加。错误的初始偏移会导致相机初始位置异常,为后续抖动埋下隐患。输入与相机逻辑的更新时机错误
Input.GetAxis("Mouse X/Y")是基于帧率的输入采样,应该放在Update方法中处理;而你放在了FixedUpdate(固定时间步长更新)中,两者调用频率不匹配会导致输入采样不连续,直接引发画面闪烁。相机位置与旋转的顺序错误
当前代码先设置相机位置,再更新偏移量,导致每帧的位置计算滞后于偏移更新,相机运动逻辑脱节,加剧抖动。
修复后的完整代码
using UnityEngine; public class CameraFollowMain : MonoBehaviour { [SerializeField] private Transform target; [SerializeField] private float camMotionSpeed = 2f; [SerializeField] private float camDistance = 1.5f; private Vector3 offset; void Start() { // 计算相机相对于目标的初始偏移向量,归一化后保持设定距离 offset = (transform.position - target.position).normalized * camDistance; } void Update() { // 先根据鼠标输入更新偏移量 offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * camMotionSpeed, Vector3.up) * offset; offset = Quaternion.AngleAxis(-Input.GetAxis("Mouse Y") * camMotionSpeed, Vector3.right) * offset; // 根据更新后的偏移量设置相机位置 transform.position = target.position + offset; // 让相机始终看向目标 transform.LookAt(target.position); } }
关键修改说明
- 修正初始偏移计算:将
transform.position + target.position改为transform.position - target.position,正确获取相机相对于目标的初始方向向量。 - 移至Update处理逻辑:把相机控制逻辑从
FixedUpdate移到Update,保证输入采样和画面更新同步,消除因更新频率不匹配导致的闪烁。 - 调整逻辑顺序:先更新偏移量,再计算相机位置,最后执行LookAt,让每帧的相机运动逻辑连贯。
- 反转鼠标Y轴方向:添加负号
-Input.GetAxis("Mouse Y"),让鼠标上下拖动的相机旋转方向符合常规操作习惯(可根据需求调整)。
内容的提问来源于stack exchange,提问作者Shrey Patel
相关产品推荐
相关产品推荐

