Unity中玩家可穿透TileMap上3D瓦片的原因排查求助
3D瓦片地图玩家碰撞穿透问题排查方案
以下是针对Unity 2021.3.20f1版本中玩家转向行走时穿透瓦片的具体排查方向:
- 刚体与碰撞体基础配置检查
- 确认玩家Rigidbody的运动类型为
Dynamic:若设为Kinematic,物理引擎会跳过碰撞计算;同时检查Use Gravity是否启用(地面行走场景需开启),Constraints中是否误锁了移动轴导致碰撞检测失效。 - 检查瓦片Box Collider:确认
Is Trigger未被勾选(勾选后仅触发事件无物理阻挡),且碰撞体的大小、位置与瓦片模型完全贴合,无偏移或缩放错误。
- 确认玩家Rigidbody的运动类型为
- 碰撞层与物理矩阵设置
- 打开
Edit > Project Settings > Physics,在Layer Collision Matrix中确认玩家所在层与瓦片所在层的碰撞关系为允许碰撞,无取消勾选的情况。
- 打开
- 静态碰撞体属性验证
- 瓦片标记为Static时,需确认
Static下拉菜单中的Physics Static已勾选(默认启用,但批量修改可能遗漏),未勾选的静态对象碰撞体无法参与物理计算。
- 瓦片标记为Static时,需确认
- 移动逻辑实现规范
- 确保玩家移动仅通过
Rigidbody.MovePosition或Rigidbody.AddForce实现:直接修改Transform.position/Transform.Translate会绕过物理引擎碰撞检测,必然导致穿透。 - 开启连续碰撞检测:若玩家移动速度较快,将Rigidbody的
Collision Detection设为Continuous或Continuous Dynamic,避免帧间位移过大穿过碰撞体。
- 确保玩家移动仅通过
- 物理引擎参数调整
- 在
Edit > Project Settings > Physics中,适当调大Default Contact Offset(从默认0.01改为0.02~0.05),解决因碰撞体间距过小导致的穿透;同时调大Solver Iteration Count(从默认6改为10~12),提升碰撞求解精度。
- 在
内容的提问来源于stack exchange,提问作者Errant Wanderer
相关产品推荐
相关产品推荐

