Unity:OnTriggerEnter2D未触发,碰撞后未显示游戏结束界面求助
确认触发检测的代码逻辑
触发碰撞得用OnTriggerEnter2D(Collider2D other),不能用普通碰撞的OnCollisionEnter2D(Collision2D other)。检查红色矩形或者玩家身上的脚本,有没有正确写这个触发回调:void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) // 记得给玩家设好对应的Tag { // 这里写显示游戏结束界面的逻辑 Debug.Log("触发游戏结束"); } }注意:这个方法挂在带触发Collider的红色矩形上,或者挂在玩家身上都行,但别两边都挂,避免逻辑乱掉。
检查对象Tag与判断条件
如果代码里用了CompareTag,一定要确认玩家对象的Inspector里已经设好对应的Tag(比如"Player"),拼写大小写完全一致。不用Tag的话,也可以通过other.gameObject.name或者直接判断组件来确认碰撞对象,但Tag是最靠谱的方式。确认双方的Rigidbody2D组件
Unity的2D触发碰撞要求至少一方带Rigidbody2D组件,而且这个组件不能设成Kinematic(除非另一方是动态刚体)。检查玩家有没有加Rigidbody2D,Body Type设成Dynamic或者Static(如果红色矩形是动态的话),别勾Is Kinematic(要触发检测的话)。检查预制体的实例化状态
红色矩形是预制体,得确认场景里的实例是不是正确继承了预制体的触发设置:选中场景里的红色矩形,看BoxCollider2D的Is Trigger是不是勾上了,有时候改了预制体没同步到场景实例,会导致设置失效。验证碰撞层的交互设置
打开Edit > Project Settings > Physics2D,检查红色矩形和玩家所在Layer的Collision Matrix,确保这两个层是允许交互的。要是对应层的交互关了,就算Collider设置对了也不会触发检测。加调试日志排查
在触发方法里加Debug.Log,或者在场景里开Gizmos看Collider的范围,确认玩家真的进到红色矩形的触发区域了。有时候Collider的大小或位置设错了,实际根本没碰到触发区。
内容的提问来源于stack exchange,提问作者Dolphin

