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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:09:56