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

Unity中脚本修改Cinemachine Lens.OrthographicSize实现缩放

Cinemachine 2D相机Tab键拉远缩放实现方案

你的实现思路是对的,核心确实是修改虚拟相机的正交尺寸参数,只是很多初学者容易写错属性名、或者改错对象,按下面步骤做就能直接跑通:

前提确认

先检查你的Cinemachine Virtual Camera基础配置:

  • 相机Projection模式设为Orthographic(正交),符合2D项目需求
  • 跟随、边界限制(如果用了Cinemachine Confiner)等配置已经调试到正常跟随玩家的状态

步骤1:编写缩放控制脚本

新建C#脚本命名为CameraZoomController,复制以下代码:

using Cinemachine;
using UnityEngine;

public class CameraZoomController : MonoBehaviour
{
    [Header("参数配置")]
    [SerializeField] private CinemachineVirtualCamera targetVcam;
    [SerializeField] private float defaultSize = 5f; // 日常正常视角的正交尺寸
    [SerializeField] private float zoomOutSize = 8f; // 拉远后的正交尺寸,数值越大视野越广
    [SerializeField] private float zoomSmoothSpeed = 6f; // 缩放过渡速度,越大切换越快

    private float _currentTargetSize;

    private void Start()
    {
        _currentTargetSize = defaultSize;
    }

    private void Update()
    {
        // 按住Tab拉远,松开回弹的逻辑
        if (Input.GetKey(KeyCode.Tab))
        {
            _currentTargetSize = zoomOutSize;
        }
        else
        {
            _currentTargetSize = defaultSize;
        }

        // 平滑过渡到目标尺寸,避免硬切生硬
        targetVcam.m_Lens.OrthographicSize = Mathf.Lerp(
            targetVcam.m_Lens.OrthographicSize,
            _currentTargetSize,
            zoomSmoothSpeed * Time.deltaTime
        );
    }
}

步骤2:场景内配置参数

  • 把脚本挂到场景内任意常驻对象上(挂玩家、虚拟相机父物体都可以)
  • 选中挂脚本的对象,把场景里配置好的Cinemachine Virtual Camera拖到targetVcam字段赋值
  • 按自己项目的画面需求调整三个数值参数:
    • defaultSize填你现在虚拟相机默认的Orthographic Size数值,保证初始视角和你之前调好的一致
    • zoomOutSize按需调整,数值越大拉远后看到的场景范围越大
    • zoomSmoothSpeed根据手感调,想要瞬间切换就把数值调到20以上,想要慢过渡就往小调

常见踩坑说明

  • 不要直接修改主相机(Main Camera)的orthographicSize属性:Cinemachine运行时会持续覆盖主相机的所有镜头参数,改主相机参数不会生效,必须修改虚拟相机的对应属性
  • 注意属性名前缀:虚拟相机的镜头参数在代码里是m_Lens,不是直接Lens,漏写m_会报空引用或者找不到属性的错误,这是最常见的卡壳点
  • 逻辑可按需修改:如果想要「按一次Tab切拉远、再按一次切回正常视角」的切换逻辑,把Update里的按键检测部分替换成下面的代码即可:
if (Input.GetKeyDown(KeyCode.Tab))
{
    _currentTargetSize = Mathf.Approximately(_currentTargetSize, defaultSize) ? zoomOutSize : defaultSize;
}
  • 如果你用的是新版Input System,只需要把按键检测部分换成你自己绑定的Tab输入接口即可,核心修改m_Lens.OrthographicSize的逻辑完全通用

如果你加了Cinemachine的边界Confiner组件,拉远后记得同步调整边界范围,避免拉远后镜头拍到边界外的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:18:52