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

Unity 3D脚本开发:如何限制相机滚轮缩放的Z轴移动范围

解决相机滚轮缩放的Z轴移动范围限制问题

你可以在现有移动逻辑之后,通过Mathf.Clamp方法限制相机的Z轴位置,同时保留原有的LookAt和滚轮移动逻辑。以下是两种适配场景的修改方案:

方案1:限制世界空间Z轴范围

如果你的Z轴范围是世界坐标系下的固定区间,直接修改相机的世界位置即可:

public class ScrollWheel : MonoBehaviour
{
    public Transform target;
    public float speed;
    // 编辑器可配置的范围参数,方便调试调整
    public float minWorldZ = -190f;
    public float maxWorldZ = -20f;

    void Update()
    {
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        transform.LookAt(target);
        // 执行原有的滚轮移动逻辑
        transform.Translate(0, 0, scroll * speed, Space.Self);
        
        // 限制Z轴位置在指定区间内
        Vector3 clampedPos = transform.position;
        clampedPos.z = Mathf.Clamp(clampedPos.z, minWorldZ, maxWorldZ);
        transform.position = clampedPos;
    }
}

方案2:限制相对目标的局部Z轴范围

如果相机需要围绕目标移动,限制相对于目标的局部Z轴范围会更稳定(不受目标世界位置变化影响):

public class ScrollWheel : MonoBehaviour
{
    public Transform target;
    public float speed;
    public float minLocalZ = -190f;
    public float maxLocalZ = -20f;

    void Update()
    {
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        
        // 将相机位置转换为目标的局部坐标系
        Vector3 localPos = target.InverseTransformPoint(transform.position);
        // 在局部Z轴上应用滚轮移动
        localPos.z += scroll * speed;
        // 限制局部Z轴范围
        localPos.z = Mathf.Clamp(localPos.z, minLocalZ, maxLocalZ);
        // 转换回世界坐标系并赋值
        transform.position = target.TransformPoint(localPos);
        
        // 保持相机看向目标
        transform.LookAt(target);
    }
}

说明

  • 两个方案都保留了你原有的核心逻辑,只需添加范围限制的代码即可
  • 把范围参数设为public,可以直接在Unity编辑器里调整数值,无需反复修改代码
  • 根据你的项目场景选择方案:固定世界范围用方案1,跟随目标移动用方案2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:22:23