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

如何对Input.mouseScrollDelta做Clamp处理以限制相机Y轴位置在10-100区间

问题原因

  • 你之前的写法核心错误是将Mathf.Clamp作用在了滚动增量值上,而非相机的最终Y轴坐标值,同时存在参数类型错误的问题:
    1. 第一种错误写法中,Input.mouseScrollDelta.y本身是个很小的数值(单次滚动一般只有±1左右),你将它限制在10~100区间后,每次执行都会给Y轴至少加10的增量,自然会出现相机直接向上飞的问题
    2. 第二种尝试的写法存在两处语法错误:Input.mouseScrollDelta是Vector2类型不能直接传入float参数位,camera.transform.position是Vector3类型也不能直接传入Mathf.Clamp,哪怕修正类型后,你依然是把Clamp的结果作为增量叠加到原坐标,而非直接赋值最终坐标,逻辑依然错误

正确实现

Mathf.Clamp的作用是对最终的目标值做范围裁剪,正确逻辑是先计算滚动后的Y轴坐标,再做范围限制,最后直接赋值给相机位置:

// 计算滚动后的Y轴数值
float targetY = camera.transform.position.y - Input.mouseScrollDelta.y;
// 限制Y轴范围在10~100之间
float clampedY = Mathf.Clamp(targetY, 10f, 100f);
// 赋值新的相机坐标,保留原X、Z轴数值
camera.transform.position = new Vector3(camera.transform.position.x, clampedY, camera.transform.position.z);

也可以合并为一行写法:

camera.transform.position = new Vector3(
    camera.transform.position.x,
    Mathf.Clamp(camera.transform.position.y - Input.mouseScrollDelta.y, 10f, 100f),
    camera.transform.position.z
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:45:01