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
相关产品推荐
相关产品推荐

