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
相关产品推荐
相关产品推荐

