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

Unity中X轴旋转限制(Clamp)不生效问题排查求助

问题根因

你当前的Mathf.Clamp逻辑限制的是每帧的旋转增量值,而非物体最终的X轴总旋转角度。每帧通过Input.GetAxis("Mouse Y")得到的输入值本身范围就在-11之间,乘以speed后数值也远小于你设置的-4510的限制区间,所以Clamp逻辑相当于完全没有生效。后续调用transform.Rotate会持续累加旋转角度,自然无法限制住整体旋转范围。

修复方案

正确逻辑是自行存储累计的X轴旋转角度,每次新增旋转增量后对总角度做Clamp,再把限制后的总角度赋值给物体的欧拉角即可,不要直接读取transform.eulerAngles做计算,Unity内部会把欧拉角转换为0~360范围输出,会导致负角度取值异常。
修复后的代码如下:

public float speed = 5f;
public float minRotation = -45;
public float maxRotation = 10;
// 私有变量存储累计的X轴旋转角度,避免欧拉角取值跳变
private float currentXRotation = 0f;

void Update()
{
    if (Input.GetMouseButton(0))
    {
        // 计算当前帧的旋转增量
        float rotationDelta = Input.GetAxis("Mouse Y") * speed;
        // 累加到总旋转角度,这里用减是适配默认鼠标操作方向,方向反了可以改成加
        currentXRotation -= rotationDelta;
        // 对总旋转角度做范围限制
        currentXRotation = Mathf.Clamp(currentXRotation, minRotation, maxRotation);
        // 直接赋值修改欧拉角
        transform.localEulerAngles = new Vector3(currentXRotation, transform.localEulerAngles.y, transform.localEulerAngles.z);
    }
}
注意事项
  • 如果控制的是父物体下的子对象,使用localEulerAngles可以避免父物体旋转对当前逻辑的干扰
  • 旋转方向可以根据操作习惯调整currentXRotation累加时的加减符号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:06:02