2D 物理:碰撞形状、刚体与触发器
物品有一个圆形检测区域,并不意味着它必须被重力推动。先分清两个问题:我想知道它们有没有接触,还是希望引擎模拟它们怎样运动?
三个角色
Collider2D 定义参与 2D 物理的形状。Rigidbody2D 决定物体如何参与模拟。Trigger 表示接触时触发通知,不产生普通的阻挡响应。UI 事件射线是另一条检测路径,Canvas 物品不必为了能拖拽就添加刚体。
| 需求 | 可以先考虑 |
|---|---|
| 固定格子合成 | 网格索引 + UI 命中,不引入物理模拟 |
| 下落合成、水果堆叠 | Rigidbody2D + Collider2D + 明确的合成规则 |
| 进入奖励区域 | 触发器通知 |
| 点击世界物体 | 射线/点检测 + Layer 过滤 |
网格合成与重力合成的复杂度不同。后者还涉及堆叠稳定、接触抖动、连续碰撞和合成时机,不适合直接把网格示例换几个组件就认为完成。

常见配置陷阱
2D 和 3D 是两套物理系统:Collider2D 不能用 3D 的碰撞回调接收。2D 触发事件要求参与方至少一方有 Rigidbody2D,具体交互还受 Body Type、碰撞矩阵、激活状态等影响。
Dynamic 刚体由物理模拟驱动,不应同时在 Update 中持续直接改 Transform。应根据运动类型选择合适的刚体接口,并明确采样输入与推进模拟的位置。
移动很快的小物体可能穿过薄障碍。先检查步长、速度、碰撞检测方式与几何厚度;提高模拟频率会增加计算成本,不能当作无代价修复。
接触事件不是合成授权
两个物体可能在多个接触点或多次回调中出现。同一对物品的合成必须只提交一次,并确认对象还处于可合成状态。
后端里的幂等思路在这里仍然有用:检测只产生候选事件,业务层负责合法性、唯一处理和状态推进。
AI 协作与验证
请说明这是网格合成还是物理堆叠。若用物理,列出 Rigidbody2D 类型、Collider2D、Trigger、Layer 和回调要求。解释谁控制位置,以及重复接触如何避免重复合成。
验证不同帧率、边缘接触、快速运动、同时多个接触和最高等级。参考:2D 触发回调、Dynamic Rigidbody2D。