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

Unity 2D游戏Rigid Body 2D正确使用及碰撞穿模问题求解

Unity 2D 刚体碰撞穿模问题解决指南

基础物理规则说明

Unity 2D 物理体系中,只有挂载Dynamic 类型 Rigidbody2D 的物体,才能和静态场景碰撞体产生正常的碰撞阻挡响应;Kinematic、Static 类型刚体默认不会和静态碰撞体触发物理阻挡,只支持碰撞事件回调。

分步配置方案

  • 场景侧配置
    • 移除 Grid 上挂载的通用 Box Collider,改为给 Tilemap 挂载 Tilemap Collider 2D 组件。如果需要避免 Tile 接缝导致角色卡顿,可额外添加 Composite Collider 2D 组件,勾选 Tilemap Collider 2D 面板的「Used By Composite」选项,Composite 会自动合并连续 Tile 的碰撞边界。
    • 房屋、障碍物等静态阻挡物体,根据形状挂载对应 2D 碰撞体(Box Collider 2D/Circle Collider 2D 等),无需额外挂载 Rigidbody2D。
  • 角色侧配置
    • 给角色 Sprite 挂载 Rigidbody2D 组件,Body Type 设置为 Dynamic,如果你的游戏不需要重力效果,将 Gravity Scale 设为 0,不要勾选「Is Kinematic」选项。
    • 给角色挂载和显示范围匹配的 2D 碰撞体,不要和场景碰撞体出现初始重叠。
    • 代码控制移动时,禁止直接修改 transform.position,需通过修改 Rigidbody2D.velocity 或者调用 rb.MovePosition() 方法实现位移,直接修改 Transform 会跳过物理引擎碰撞检测,必然出现穿模。
    • 如果角色移动速度较高,可将 Rigidbody2D 的 Collision Detection 选项改为 Continuous,避免物理引擎漏判碰撞帧。

常见异常排查

  • 检查所有碰撞体的「Is Trigger」选项是否被勾选,勾选后碰撞体仅触发事件,不会产生物理阻挡效果。
  • 确认角色和场景碰撞体没有配置层级碰撞忽略,可在 Edit - Project Settings - Physics 2D 面板的 Layer Collision Matrix 中检查对应层级的碰撞开关是否开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:48:03