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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:30:42