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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:52:09