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

围绕角色旋转时Camera画面闪烁问题求助

Unity相机环绕旋转时画面闪烁问题排查与修复

问题根源分析

你的相机闪烁问题主要来自三个代码逻辑错误:

  1. 初始偏移计算错误
    Start方法里的offset计算逻辑完全错误,正确的相机偏移应该是相机相对于目标的初始位置向量,而非两者位置相加。错误的初始偏移会导致相机初始位置异常,为后续抖动埋下隐患。

  2. 输入与相机逻辑的更新时机错误
    Input.GetAxis("Mouse X/Y")是基于帧率的输入采样,应该放在Update方法中处理;而你放在了FixedUpdate(固定时间步长更新)中,两者调用频率不匹配会导致输入采样不连续,直接引发画面闪烁。

  3. 相机位置与旋转的顺序错误
    当前代码先设置相机位置,再更新偏移量,导致每帧的位置计算滞后于偏移更新,相机运动逻辑脱节,加剧抖动。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:10:32