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

如何在Cinemachine Free Look相机中单独锁定Z轴旋转?

解决Cinemachine Free Look相机Z轴(Roll)旋转锁定问题

没问题,我之前做飞行模拟项目时刚好碰到过一模一样的需求,给你两个最实用的解决办法:

方法1:通过Cinemachine Free Look内置参数锁定Roll轴

Cinemachine其实自带了控制Roll旋转的选项,不用额外写代码就能搞定:

  • 选中你的Cinemachine Free Look相机对象,打开Inspector面板
  • 找到Body模块下的Framing Transposer(Free Look默认用这个Body类型)
  • 展开Rotation折叠面板,找到Roll相关设置:
    • 把Roll Damping设为0,相机就不会继承目标的Roll旋转了
    • 如果需要强制固定Roll角度,勾选Lock Roll选项,再在Roll输入框里设置你想要的固定角度(比如0,让相机始终保持水平)

方法2:用空物体做中间层级隔离(适合复杂挂载场景)

如果你的飞机挂载结构比较复杂,或者上面的方法没生效,可以试试这个“隔离法”:

  • 在飞机对象下创建一个空物体(比如命名为CameraMount)
  • 把这个空物体的Z轴旋转值固定为0(或者你需要的固定角度),确保它不会继承飞机的Z轴翻滚
  • 再把Cinemachine Free Look相机挂载到这个空物体上
  • 最后调整Free Look的Follow和Look At目标为飞机本身,这样相机只会跟随飞机的位置和其他轴旋转,不会跟着Z轴翻滚

补充:代码控制(适合动态切换锁定状态)

要是你需要在游戏过程中动态开启/关闭Z轴锁定,可以写个简单的脚本挂在Free Look相机上:

using UnityEngine;
using Cinemachine;

public class LockCameraRoll : MonoBehaviour
{
    public CinemachineFreeLook freeLookCam;
    public bool lockRoll = true;
    public float fixedRollAngle = 0f;

    void Update()
    {
        if (lockRoll && freeLookCam != null)
        {
            // 获取当前相机旋转,仅锁定Z轴角度
            Quaternion currentRot = freeLookCam.transform.rotation;
            currentRot = Quaternion.Euler(currentRot.eulerAngles.x, currentRot.eulerAngles.y, fixedRollAngle);
            freeLookCam.transform.rotation = currentRot;
        }
    }
}

使用时记得把Free Look相机拖到脚本的freeLookCam字段里,就能随时通过lockRoll变量控制是否锁定Z轴旋转了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:42:43