1 首先要了解两个概念 : 触发事件(不产生物理碰撞效果),碰撞事件(有碰撞效果)
A: 触发事件
触发事件:触发事件由触发器生成(引入问题:什么是触发器?)
触发器:触发器是 Is Trigger
属性为 true
的碰撞组件。当发生碰撞时,触发器不会产生 碰撞效果,所以触发器只用于碰撞检测。
如图所示:
触发事件
触发事件目前包括以下三种:
事件 | 说明 |
---|---|
onTriggerEnter | 触发开始 |
onTriggerStay | 触发保持 |
onTriggerExit | 触发结束 |
其中可产生触发事件的碰撞对为:
类型 | 静态刚体 | 运动学刚体 | 动力学刚体 |
---|---|---|---|
静态刚体 | ✔ | ✔ | |
运动学刚体 | ✔ | ✔ | ✔ |
动力学刚体 | ✔ | ✔ | ✔ |
注意:前提是两者都必须带有碰撞组件,并且至少有一个是触发器类型。
如果想要下执行触发事件必须把碰撞组件的 Is Trigger
勾选上 (设置为True)也就是碰撞组件变成了触发器
测试代码如下
ColliderStr = this.getComponent(BoxCollider);
ColliderStr?.on('onTriggerEnter', this.onTrigger, this);
onTrigger(event: ITriggerEvent) {
console.log(event.type, event);
}
B:碰撞事件
只有碰撞组件才能产生碰撞事件,触发组件不能回调碰撞事件
当碰撞组件的Is Trigger
未勾选上 (设置为False)时才会调用碰撞回调事件
ColliderStr = this.getComponent(BoxCollider);
//1碰撞事件
ColliderStr?.on('onCollisionEnter', this.onICollision, this);
onICollision(event: ICollisionEvent) {
console.log(event.type, event);
}
碰撞事件
碰撞事件根据碰撞数据生成,静态类型的刚体之间不会产生碰撞数据。
目前碰撞事件包括以下三种:
事件 | 说明 |
---|---|
onCollisionEnter | 碰撞开始 |
onCollisionStay | 碰撞保持 |
onCollisionExit | 碰撞结束 |
其中可产生碰撞事件的碰撞对为:
类型 | 静态刚体 | 运动学刚体 | 动力学刚体 |
---|---|---|---|
静态刚体 | ✔ | ✔ | |
运动学刚体 | ✔ | ✔ | ✔ |
动力学刚体 | ✔ | ✔ | ✔ |
注意:前提是两者都必须带有碰撞组件,并且都必须是碰撞器类型。