碰撞事件
每帧从 PhysicsEvents 资源中读取碰撞和传感器事件。
PhysicsEvents 资源
import { defineSystem, addSystem, Res } from 'esengine';import { PhysicsEvents } from 'esengine/physics';
addSystem(defineSystem( [Res(PhysicsEvents)], (events) => { for (const e of events.collisionEnters) { // e.entityA, e.entityB, e.normalX, e.normalY, e.contactX, e.contactY } for (const e of events.collisionExits) { // e.entityA, e.entityB } for (const e of events.sensorEnters) { // e.sensorEntity, e.visitorEntity } for (const e of events.sensorExits) { // e.sensorEntity, e.visitorEntity } }));事件类型
碰撞进入
两个非传感器碰撞体开始接触的第一帧触发。
| 字段 | 类型 | 说明 |
|---|---|---|
entityA | Entity | 碰撞对中的第一个实体 |
entityB | Entity | 碰撞对中的第二个实体 |
normalX | number | 碰撞法线 X 分量 |
normalY | number | 碰撞法线 Y 分量 |
contactX | number | 世界空间中的接触点 X |
contactY | number | 世界空间中的接触点 Y |
碰撞退出
两个非传感器碰撞体停止接触的第一帧触发。
| 字段 | 类型 | 说明 |
|---|---|---|
entityA | Entity | 碰撞对中的第一个实体 |
entityB | Entity | 碰撞对中的第二个实体 |
传感器进入
非传感器碰撞体开始与传感器碰撞体重叠时触发。
| 字段 | 类型 | 说明 |
|---|---|---|
sensorEntity | Entity | isSensor = true 的实体 |
visitorEntity | Entity | 进入传感器区域的实体 |
传感器退出
非传感器碰撞体停止与传感器碰撞体重叠时触发。
| 字段 | 类型 | 说明 |
|---|---|---|
sensorEntity | Entity | isSensor = true 的实体 |
visitorEntity | Entity | 离开传感器区域的实体 |