Unity滑动数字拼图:OnTriggerEnter2D仅启动时生效问题求助
滑动数字拼图游戏碰撞检测问题修复方案
你的代码仅在触发体首次进入碰撞器时执行逻辑,当方块移动离开碰撞范围时,OnTriggerEnter2D不会触发,导致Collide_Up无法被重置为false——这就是else语句失效的核心原因:只有非"Piece"/"Up_Collider"的物体进入时才会走else分支,而方块离开碰撞区时根本不会调用这个方法。
修复方案
1. 拆分进入/离开逻辑,用OnTriggerExit2D处理状态重置
将碰撞进入和离开的逻辑分开,确保方块离开时能及时更新相邻状态。同时建议用**标签(Tag)**替代物体名称判断,避免拼写错误或重名问题。
修改后的代码示例:
// 触发体进入时标记上方有碰撞 private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Piece") || collision.CompareTag("UpCollider")) { piece_Script.Collide_Up = true; Debug.Log("上方检测到相邻方块"); } } // 触发体离开时重置碰撞状态 private void OnTriggerExit2D(Collider2D collision) { if (collision.CompareTag("Piece") || collision.CompareTag("UpCollider")) { piece_Script.Collide_Up = false; Debug.Log("上方相邻方块已离开"); } }
2. 额外优化建议
- 避免依赖物体名称做判断:在Unity编辑器中给拼图方块和碰撞器设置专属标签(如
PuzzlePiece、UpCollider),CompareTag的性能比字符串匹配更优,且更不易出错。 - 主动触发状态刷新:如果方块移动逻辑是通过代码控制的,可以在移动完成后,主动调用一次碰撞检测逻辑,确保相邻方块的状态及时更新。
内容的提问来源于stack exchange,提问作者AraAraSayonnara
相关产品推荐
相关产品推荐

