Unity问题:球体碰撞DeathCube预制体时未被销毁
问题根源与解决方案
嘿,我一眼就看到问题啦——你在同一个脚本里写了两个同名的OnTriggerEnter方法!在C#里,同一个类中不能存在两个参数完全相同的同名方法,后面的方法会直接覆盖掉前面的那个。也就是说,你的DeathCube碰撞逻辑根本没机会执行,只有GoldCube的计数代码在运行,这就是球体碰DeathCube没反应的核心原因!
第一步:合并触发逻辑
把两个触发判断合并到同一个OnTriggerEnter方法里就行,示例代码如下:
void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("DeathCube")) { Destroy(gameObject); } else if (other.gameObject.CompareTag("GoldCube")) { gold++; } }
这里顺便推荐用CompareTag()代替直接比较tag属性,它不仅性能更好,还能在你拼写错误标签名时给出编译警告,避免低级错误。
第二步:检查触发必备条件(以防还有其他问题)
如果合并后还是没效果,那得检查这些Unity触发机制的基础要求:
- 确保球体和DeathCube的碰撞组件(比如
SphereCollider/BoxCollider)都勾选了IsTrigger选项; - 确保至少其中一个物体(球体或者DeathCube)带有
Rigidbody组件,并且没有勾选IsKinematic(除非你是用脚本手动控制运动); - 检查标签名是否完全匹配:有没有大小写错误?比如你给Cube设的是
deathcube但代码里写的是DeathCube; - 确认脚本是挂在球体对象上的,而不是挂在Cube上。
内容的提问来源于stack exchange,提问作者Koska
相关产品推荐
相关产品推荐

