Mathf.Clamp行为异常:相机垂直旋转角度限制失效求助
相机垂直旋转角度限制失效的问题解决
- 问题根源:你现在错误地对旋转增量做了
Mathf.Clamp限制,而不是对相机最终的垂直角度进行约束。哪怕每次输入的增量都在范围内,多次累积后相机角度还是会超出-70°到70°的区间。 - 修正思路:必须先计算出相机旋转后的最终垂直角度,再对这个最终值做范围限制,而不是限制输入的增量值。
修正后的代码示例:
// 计算本次旋转的增量值 float xIncrement = _joystick.Vertical * (_moveSpeed * Time.deltaTime); // 将当前相机X轴角度转换为-180°到180°的范围,避免欧拉角360°循环的问题 float currentCamX = Mathf.DeltaAngle(0, myCamera.transform.eulerAngles.x); // 计算新的X轴角度,并限制在设定的范围内 float newCamX = Mathf.Clamp(currentCamX - xIncrement, camMin, camMax); // 赋值给相机,保持Y、Z轴角度不变 myCamera.transform.eulerAngles = new Vector3(newCamX, myCamera.transform.eulerAngles.y, myCamera.transform.eulerAngles.z);
补充说明:
- 使用
Mathf.DeltaAngle是为了处理欧拉角的循环问题,比如当相机X轴角度显示为350°时,实际等价于-10°,这样Clamp才能正确识别并限制角度。 - 如果你能确保不会出现角度循环的场景,也可以直接使用
myCamera.transform.eulerAngles.x,但转换后的方式兼容性更强。
内容的提问来源于stack exchange,提问作者Bloemenpot
相关产品推荐
相关产品推荐

