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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:10:46