跳转到内容

碰撞事件

每帧从 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
}
}
));

事件类型

碰撞进入

两个非传感器碰撞体开始接触的第一帧触发。

字段类型说明
entityAEntity碰撞对中的第一个实体
entityBEntity碰撞对中的第二个实体
normalXnumber碰撞法线 X 分量
normalYnumber碰撞法线 Y 分量
contactXnumber世界空间中的接触点 X
contactYnumber世界空间中的接触点 Y

碰撞退出

两个非传感器碰撞体停止接触的第一帧触发。

字段类型说明
entityAEntity碰撞对中的第一个实体
entityBEntity碰撞对中的第二个实体

传感器进入

非传感器碰撞体开始与传感器碰撞体重叠时触发。

字段类型说明
sensorEntityEntityisSensor = true 的实体
visitorEntityEntity进入传感器区域的实体

传感器退出

非传感器碰撞体停止与传感器碰撞体重叠时触发。

字段类型说明
sensorEntityEntityisSensor = true 的实体
visitorEntityEntity离开传感器区域的实体

参见