跳到主要内容

2D 物理与碰撞:先决定是否真的需要模拟

如果两个相同物品拖到同一个格子就合成,你可以直接按格子数据判断,不一定需要物理。如果小球要受重力滚落、碰撞后反弹,物理引擎就能提供有用的模拟。

动态刚体、静态地面与碰撞体的关系点击图片查看原图 ↗

三种需求,三种思路​

需求优先方案原因
棋盘相邻、格子重合、合成条件数据规则与坐标判断结果可控,容易复现
进入区域触发机关碰撞/触发检测需要知道接触,但不一定需要物理响应
重力、速度、反弹、摩擦刚体物理模拟需要连续运动与接触响应

RigidBody2D 描述物理运动方式,Collider2D 描述形状与接触。2D 和 3D 物理是不同系统,不能把 3D 的 Collider 混进 2D 示例。

最小实验:球落到地面​

  1. 按官方配置启用合适的 2D 物理后端与全局设置。
  2. 建一个 Ground,添加静态 RigidBody2D 和 BoxCollider2D,形状覆盖地面。
  3. 建一个 Ball,添加动态 RigidBody2D 和 CircleCollider2D,放在地面上方。
  4. 调整碰撞分组与矩阵,确保两者允许接触。
  5. 预览观察落下与停止;打开调试绘制,确认碰撞形状与图像一致。

这只是物理实验,不包含完整接触监听脚本。若要接触事件,按所选后端和组件配置开启监听,使用对应 2D 接触事件;不要根据画面重叠就推断回调一定发生。

常见故障​

碰撞体没有随 Sprite 尺寸符合预期、分组矩阵关闭、身体类型选择错误,都会造成“看起来撞了,实际上没撞”。高速小物体还可能穿透,需要检查步长、连续检测等后端能力,而不是盲目把帧率调得更高。

不要同时让物理模拟控制动态刚体,又每帧强行 setPosition 控制同一对象。先确定运动权归物理还是脚本,再选速度、力或位置操作。

验收与 AI 需求​

做一个 2D 落球实验,明确物理后端、刚体类型、碰撞体与分组。
球受重力落下停在地面,不做计分与网络。
提供编辑器配置、调试绘制方式,以及穿透和无回调的排查顺序。
不要用 3D API,也不要每帧直接覆盖动态刚体位置。

物理模拟的结果也不能天然作为跨设备严格一致的联网裁决依据。实时联机的确定性与同步问题另见进阶边界。

依据:2D 物理系统、物理后端。