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

