如何对Input.mouseScrollDelta做Clamp处理以限制相机Y轴位置在10-100区间
问题原因
- 你之前的写法核心错误是将
Mathf.Clamp作用在了滚动增量值上,而非相机的最终Y轴坐标值,同时存在参数类型错误的问题:- 第一种错误写法中,
Input.mouseScrollDelta.y本身是个很小的数值(单次滚动一般只有±1左右),你将它限制在10~100区间后,每次执行都会给Y轴至少加10的增量,自然会出现相机直接向上飞的问题 - 第二种尝试的写法存在两处语法错误:
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
相关产品推荐
相关产品推荐

