Unity中OnCollisionEnter2D方法未触发的问题求助
Unity中OnCollisionEnter2D不触发的排查与解决方法
先确认脚本是否正常运行
- 打开tableBox的Inspector面板,检查挂载的脚本组件前的复选框是否勾选,未勾选的话脚本不会执行
- 在脚本里添加
Start()方法验证加载状态:
运行游戏后查看控制台,若无输出,说明脚本未正确加载——检查脚本是否挂载到错误对象,或脚本文件名与类名是否完全一致(Unity要求两者必须同名)void Start() { Debug.Log("Table脚本已启动"); }
碰撞检测核心条件排查
- Collider的Trigger状态检查:两个物体的BoxCollider2D都不能勾选
Is Trigger,勾选后会进入触发模式,仅会调用OnTriggerEnter2D,不会触发OnCollisionEnter2D - Rigidbody2D设置验证:
- customer的Rigidbody2D必须设为Dynamic(再次确认未改回其他类型)
- tableBox的Rigidbody2D可设为Static或Kinematic,但如果两个物体均为Kinematic,必须给其中一个开启
Use Full Kinematic Contacts选项,否则无法触发碰撞 - 禁止两个物体的Rigidbody2D都设为Static,Static物体之间不会触发任何碰撞检测
- 标签与代码匹配检查:
- 确认customer对象的标签确实是
customer(Unity标签区分大小写,注意拼写细节) - 代码中改用
collision.gameObject.CompareTag("customer")替代直接比较tag,该方法会自动处理空对象与拼写错误,更可靠
- 确认customer对象的标签确实是
- 层级碰撞矩阵检查:
打开Edit > Project Settings > Physics 2D,找到Layer Collision Matrix,确认customer和tableBox所在层级的碰撞权限已勾选,未勾选的话两个层级的物体不会触发碰撞
修正后的示例代码
void Start() { Debug.Log("Table脚本已启动"); } void OnCollisionEnter2D(Collision2D collision) { Debug.Log("进入OnCollisionEnter2D方法"); if(collision.gameObject.CompareTag("customer")) { Debug.Log("检测到customer碰撞!"); } }
内容的提问来源于stack exchange,提问作者user19575565
相关产品推荐
相关产品推荐

