Unity中Cinemachine Freelook相机如何实现鼠标滚轮缩放?
Cinemachine Freelook相机实现缩放功能的方法
方法一:用Cinemachine内置输入绑定(最快实现)
- 选中你的Freelook相机,在Inspector面板找到
Cinemachine Freelook组件 - 展开Axis Control折叠栏,找到Zoom模块
- 在Axis Name下拉框选择
Mouse ScrollWheel(Unity默认输入轴) - 设置Zoom Speed控制缩放灵敏度,同时通过Minimum Radius和Maximum Radius限制缩放的远近范围
- 完成设置后,滚动鼠标滚轮就能直接控制相机的远近
方法二:手动编写脚本(自定义逻辑需求)
如果需要更灵活的控制逻辑(比如结合按键触发缩放、特殊场景限制等),可以通过脚本修改Freelook的轨道参数:
- Freelook相机的视角由三个轨道(Top、Middle、Bottom)共同控制,同步修改三个轨道的
m_Radius值即可实现缩放 - 示例代码:
using UnityEngine; using Cinemachine; public class FreelookZoomController : MonoBehaviour { [SerializeField] private CinemachineFreeLook _freelookCamera; [SerializeField] private float _zoomSpeed = 3f; [SerializeField] private float _minRadius = 1.5f; [SerializeField] private float _maxRadius = 8f; private void Update() { float scrollInput = Input.GetAxis("Mouse ScrollWheel"); if (Mathf.Abs(scrollInput) < 0.01f) return; // 计算新半径并限制范围 float targetRadius = _freelookCamera.m_Orbits[0].m_Radius - scrollInput * _zoomSpeed; targetRadius = Mathf.Clamp(targetRadius, _minRadius, _maxRadius); // 同步三个轨道的半径,避免视角偏移 foreach (var orbit in _freelookCamera.m_Orbits) { orbit.m_Radius = targetRadius; } } }
- 使用方式:将脚本挂载到任意GameObject,拖入你的Freelook相机引用,调整参数即可
- 若需同时调整高度,可同步修改
orbit.m_Height参数,但通常缩放仅修改半径即可
注意事项
- 不要直接修改Freelook Rig的Transform属性,Cinemachine会自动计算Rig位置,手动修改会导致视角错乱
- 使用内置Zoom时,确保Unity输入管理器中存在
Mouse ScrollWheel轴(默认已添加) - 必须同步三个轨道的参数,否则会出现相机轨道错位的问题
内容的提问来源于stack exchange,提问作者seomin1210
相关产品推荐
相关产品推荐

