跳到主要内容

2D 物理:碰撞形状、刚体与触发器

物品有一个圆形检测区域,并不意味着它必须被重力推动。先分清两个问题:我想知道它们有没有接触,还是希望引擎模拟它们怎样运动?

Collider 定义检测形状,Rigidbody 提供运动模拟,Trigger 只发送接触通知的概念图

三个角色​

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。