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

如何让Cinemachine主相机锁定全局偏移而非局部偏移?

解决Cinemachine追踪高尔夫球时偏移随球旋转的问题

  • 核心问题:你当前设置的瞄准/机身偏移是基于高尔夫球的局部坐标系,球在空中旋转时局部坐标系同步转动,相机偏移自然会失控。要实现全局空间的固定偏移,试试这几个实用方法:

方法1:用空物体做跟踪目标(最简单高效)

  1. 在高尔夫球的层级下新建一个空GameObject(比如命名为BallCameraTarget)
  2. 让这个空物体的初始位置和球完全重合,禁止它继承球的旋转——可以手动锁定空物体的旋转参数为(0,0,0),或者写一行小脚本让它只同步球的位置、不同步旋转
  3. 把Cinemachine虚拟相机的Follow和Look At目标换成这个空物体
  4. 现在在相机的Body或Aim模块里设置的偏移,就是基于全局空间的固定偏移,球怎么旋转都不会影响相机姿态

方法2:用脚本强制控制世界空间偏移

如果不想额外加空物体,写个简单脚本挂在虚拟相机上,直接用世界空间定义偏移:

using UnityEngine;
using Cinemachine;

public class GlobalCameraOffset : MonoBehaviour
{
    public Vector3 worldOffset = new Vector3(0, 2, -5); // 自定义你需要的全局偏移参数
    private CinemachineVirtualCamera vCam;

    void Start()
    {
        vCam = GetComponent<CinemachineVirtualCamera>();
    }

    void LateUpdate()
    {
        if (vCam.Follow != null)
        {
            // 计算相机在世界空间的目标位置:球的位置 + 全局偏移
            Vector3 targetPos = vCam.Follow.position + worldOffset;
            // 让相机始终看向球
            transform.LookAt(vCam.Follow.position);
            // 固定相机位置
            transform.position = targetPos;
        }
    }
}

注意:使用这个脚本时,要把虚拟相机的Body模块改成Do Nothing,避免和脚本逻辑冲突

补充说明

你之前尝试的自由视角相机没用,本质原因还是没有把跟踪目标和球的旋转解耦,只要跟踪目标是球本身,偏移就会绑定到球的局部坐标系,必然跟着旋转失控。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:43:15