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

Unity中Box Collider 2D与Tilemap Collider 2D碰撞失效问题求助

Unity水Tilemap碰撞失效&看不到碰撞盒的排查方案

先解决看不到碰撞盒绿色网格线的问题

  • 打开Scene视图右上角的Gizmos按钮,下拉列表里务必勾选Tilemap Collider 2D和Composite Collider 2D(如果用了的话)
  • 检查水Tilemap上的Tilemap Collider 2D组件是否处于启用状态,没开的话肯定看不到Gizmos线
  • 要是用了Composite Collider 2D,得确保Tilemap Collider 2D的Used By Composite选项是勾选的,否则复合碰撞不生效也看不到线

核心:让水Tilemap的碰撞真正生效

1. 给Tilemap配置正确的碰撞组件

  • 给蓝色水Tilemap添加Tilemap Collider 2D,如果水是分散的多个Tile,建议再添加Composite Collider 2D,同时把Tilemap Collider 2D的Used By Composite勾上——这样能把零散的Tile碰撞合并成一个整体,避免出现能卡进去的缝隙
  • 选中单个水Tile,在Inspector面板里确认Collider Type不是None,选Sprite或者Grid都行,没碰撞类型的话Tile本身不会产生碰撞

2. 玩家对象的组件必须达标

  • 玩家必须有Rigidbody 2D,Body Type要设为Dynamic(如果用velocity移动,别选Kinematic,否则会忽略碰撞)
  • 玩家必须加Collider 2D(比如Box Collider 2D),组件要启用,碰撞体的大小和位置要和玩家精灵匹配,别缩得太小或者偏移到精灵外面

3. 层级碰撞矩阵必须正确设置

  • 打开Edit > Project Settings > Physics 2D,找到Layer Collision Matrix
  • 找到玩家所在层级和水Tilemap所在层级,确保两者的交叉格子是打勾状态——没勾的话两个层级完全不会产生碰撞

4. 移动代码的正确写法

  • 用Rigidbody2D.velocity移动时,必须把移动逻辑写在FixedUpdate()里,别写在Update(),因为刚体物理更新是固定帧率的,Update里写会导致碰撞检测不稳定
  • 绝对不要直接修改transform.position来移动玩家,这会绕过Unity的碰撞检测系统,直接穿过去

额外排查点

  • 如果之前调整过组件顺序,不用纠结,Unity里Rigidbody和Collider的顺序不影响碰撞,只要两个组件都启用就行
  • 检查水Tilemap的层级是否和陆地Tilemap区分开,确保碰撞检测只针对水层级,别误把陆地也设成可碰撞

内容的提问来源于stack exchange,提问作者SchloesserJonas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:04:59