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

Unity3D门开关逻辑异常求助:按E键门未归位却重复旋转

问题原因及解决方法

核心问题

  1. 逻辑执行顺序冲突:每次按下E键抬起时,第一个if(Input.GetKeyUp(KeyCode.E))会先执行,把doorIsOpen设为true,紧接着第二个if(Input.GetKeyUp(KeyCode.E) && doorIsOpen)的条件也会满足,导致两次逻辑在同一帧内触发,状态被反复修改,门的旋转行为彻底混乱。
  2. 复位逻辑无效:第二个if里的Rotate(0.0f, 0.0f, 0.0f)没有任何实际旋转效果,你需要让门旋转回初始角度(比如+90度抵消之前的-90度),而不是执行无意义的0度旋转。

修正后的代码

public GameObject doorHinge;
public bool doorIsOpen;

// Update is called once per frame
void Update()
{
    if (Input.GetKeyUp(KeyCode.E))
    {
        if (!doorIsOpen)
        {
            // 门关闭时执行打开逻辑
            doorHinge.transform.Rotate(0.0f, -90f, 0.0f);
            doorIsOpen = true;
        }
        else
        {
            // 门打开时执行关闭逻辑
            doorHinge.transform.Rotate(0.0f, 90f, 0.0f);
            doorIsOpen = false;
        }
    }
}

额外优化建议

多次使用Rotate可能会因为累积误差导致门的角度偏离初始位置,更稳妥的方式是直接设置欧拉角:

// 替换旋转逻辑为直接设置目标角度
doorHinge.transform.eulerAngles = doorIsOpen ? Vector3.zero : new Vector3(0, -90, 0);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:00:39