Unity中OnTriggerEnter内Input.GetKey(KeyCode.E)无响应问题求助
问题解决:触发碰撞时按E键加载场景
问题根源
OnTriggerEnter是单次触发事件,仅在碰撞体进入触发区域的那一帧执行一次。你几乎不可能精准地在这一帧按下E键,导致输入判断永远无法触发。
正确实现方案
把触发状态标记和输入检测分离:用布尔变量记录是否处于触发区域内,然后在每帧执行的Update方法中检测输入。
完整代码示例
using UnityEngine; using UnityEngine.SceneManagement; public class TriggerSceneLoader : MonoBehaviour { public Canvas canvas; private bool isInTriggerZone = false; void OnTriggerEnter(Collider other) { if (other.CompareTag("Trigger")) { canvas.enabled = true; isInTriggerZone = true; // 标记进入触发区域 } } void OnTriggerExit(Collider other) { if (other.CompareTag("Trigger")) { canvas.enabled = false; isInTriggerZone = false; // 标记离开触发区域 } } void Update() { // 每帧检测:处于触发区域内 + E键按下 if (isInTriggerZone && Input.GetKeyDown(KeyCode.E)) { SceneManager.LoadScene("RVinterior"); Debug.Log("E Pressed, Loading Scene"); } } }
关键注意事项
- 改用
Input.GetKeyDown:仅在按键按下的第一帧返回true,避免按住E键重复触发场景加载。 - 触发对象配置:确保触发对象勾选了Is Trigger,且碰撞双方至少有一个带有
Rigidbody(可勾选Kinematic),否则触发事件不会触发。 - 场景配置:确认
RVinterior已添加到Build Settings的Scenes In Build列表中,否则场景加载会失败。
内容的提问来源于stack exchange,提问作者thedumbasswhocantcode
相关产品推荐
相关产品推荐

