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

Unity技术问询:OnCollisionEnter中Input.GetKeyDown无法触发

问题原因与解决方案

你的代码逻辑存在致命的时机问题:OnCollisionEnter仅在碰撞发生的那一帧触发一次,而你要求同时满足「刚好在碰撞触发的同一帧按下空格」,这个时机的容错率几乎为0,自然很难触发。

另外注意:你原代码里的collision.gameObject.tag = "Enemy"是赋值操作(单等号=),正确的相等判断应该用双等号==——虽然你说去掉空格判断能运行,大概率是实际代码写对了但提问时打错了,这个细节要留意。

修正方案

把碰撞状态检测和按键检测拆分到不同的生命周期函数中:

  • 用变量记录是否正与Enemy处于接触状态
  • 在Update中检测按键(Update每帧都会执行,能捕捉到任意一帧的按键输入)

修正后的代码示例:

private bool isTouchingEnemy;

void OnCollisionEnter(Collision collision)
{
    if(collision.gameObject.tag == "Enemy")
    {
        isTouchingEnemy = true;
    }
}

void OnCollisionExit(Collision collision)
{
    if(collision.gameObject.tag == "Enemy")
    {
        isTouchingEnemy = false;
    }
}

void Update()
{
    if(isTouchingEnemy && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("Working");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:15:30