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

Unity中跟随飞机的相机如何禁止绕z轴旋转,仅同步x、y轴旋转

错误原因排查

你之前的写法存在两个核心问题:

  • 直接读取Transform.rotation的x/y分量是四元数的组成部分,并非你直观理解的欧拉角度数,四元数的分量取值范围是[-1,1],直接作为角度传入会出现完全不符合预期的旋转效果
  • Transform.Rotate是增量旋转方法,每次调用都会在当前旋转基础上叠加新的旋转角度,每帧调用的话会导致旋转值无限累加,完全不适合用来做姿态同步场景

最简实现方案

直接构造仅包含飞机X、Y轴旋转的四元数赋值给相机即可,Z轴固定为0或者相机初始的Z轴旋转值:

// 如需要保留相机初始Z轴旋转,可在Awake中提前存储初始值再替换下方的0f
this.transform.rotation = Quaternion.Euler(
    Cube.transform.eulerAngles.x, 
    Cube.transform.eulerAngles.y, 
    0f
);

注意:请将这段代码放在LateUpdate生命周期中执行,确保飞机的旋转逻辑先执行完毕再更新相机姿态,避免出现画面抖动。


平滑跟随优化方案

如果需要更丝滑的跟随效果,可以添加差值逻辑:

// 可在Inspector中调整平滑系数,数值越大跟随响应越快
public float smoothRotateSpeed = 6f;
private float initialCamZRot;

void Awake()
{
    // 存储相机初始Z轴旋转值,避免覆盖相机原有设置
    initialCamZRot = transform.eulerAngles.z;
}

void LateUpdate()
{
    Quaternion targetRotation = Quaternion.Euler(
        Cube.transform.eulerAngles.x,
        Cube.transform.eulerAngles.y,
        initialCamZRot
    );
    transform.rotation = Quaternion.Lerp(
        transform.rotation, 
        targetRotation, 
        smoothRotateSpeed * Time.deltaTime
    );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:05