Unity3D碰撞未触发/检测问题:流星与玩家碰撞无响应
Unity 2D碰撞无响应问题解决
问题描述
我有一个Meteor(流星)对象和一个Player(玩家)对象,两者均挂载了RigidBody2D与Collider2D组件。流星的Collider勾选了"Is Trigger",且附加了实现OnCollisionEnter2D()方法的脚本,但当流星撞击玩家时碰撞无响应。脚本代码如下:
private void OnCollisionEnter2D(Collision2D other) { Debug.Log(other.gameObject.tag); Destroy(other.gameObject); }
相关截图:
- 流星组件截图:

- 玩家组件截图:

- 场景视图截图:

问题原因
Unity 2D物理系统中,Trigger碰撞和普通碰撞的回调机制完全分离:
- 未勾选"Is Trigger"的Collider,触发
OnCollisionEnter2D/OnCollisionStay2D/OnCollisionExit2D系列普通碰撞回调; - 勾选"Is Trigger"的Collider,只会触发
OnTriggerEnter2D/OnTriggerStay2D/OnTriggerExit2D系列触发回调,不会再执行普通碰撞的方法。
你的流星启用了Trigger,但脚本用的是普通碰撞的OnCollisionEnter2D,自然不会有响应。
解决方法
方法一:保留Trigger属性,替换回调方法
把脚本中的OnCollisionEnter2D换成OnTriggerEnter2D,参数类型改为Collider2D,修改后代码如下:
private void OnTriggerEnter2D(Collider2D other) { Debug.Log(other.gameObject.tag); Destroy(other.gameObject); }
方法二:取消Trigger属性,保留原方法
如果不需要Trigger的特性,直接取消流星Collider组件的"Is Trigger"勾选,原脚本的OnCollisionEnter2D就能正常触发碰撞逻辑。
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

