Unity3D门开关逻辑异常求助:按E键门未归位却重复旋转
问题原因及解决方法
核心问题
- 逻辑执行顺序冲突:每次按下E键抬起时,第一个
if(Input.GetKeyUp(KeyCode.E))会先执行,把doorIsOpen设为true,紧接着第二个if(Input.GetKeyUp(KeyCode.E) && doorIsOpen)的条件也会满足,导致两次逻辑在同一帧内触发,状态被反复修改,门的旋转行为彻底混乱。 - 复位逻辑无效:第二个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
相关产品推荐
相关产品推荐

