- 碰撞分组问题
- 其他地方调用和自身调用问题
- 不同刚体类型的效果
碰撞分组问题
- 刚体的碰撞分组默认是
DEFAULT,为不同的物体分为不同的组:Player、Ememy 不同的碰撞分组,在碰撞检测时才有效果


其他地方调用和自身调用问题
- 其他地方调用,比如在父级调用子级,不要传递 this
自身调用,默认传递 this
// 父级调用子级节点 body,脚本在父级上挂载 start() { // 碰撞检测 let body = this.node.getChildByName("body"); const rigidBody = body.getComponent(RigidBody); rigidBody.useCCD = true; let collider = body.getComponent(BoxCollider); console.log(collider); collider.on("onCollisionEnter", this.onCollisionEnter); // 不用传递 this } onCollisionEnter(event: ICollisionEvent) { // 如果碰撞的是金币,加分,如果是障碍物,扣分 if (event.otherCollider.node.name.startsWith("Coin")) { console.log("金币", event.type, event); } } // 脚本就在当前物体上 start() { let collider = this.node.getComponent(Collider); // 监听触发事件 collider.on("onCollisionEnter", this.onCollisionEnter, this); // collider.on("onCollisionStay", this.onCollisionStay, this); // collider.on("onCollisionExit", this.onCollisionExit, this); } onCollisionEnter(event: ICollisionEvent) { this.node.destroy(); // 销毁自己 // TODO 播放金币音效 }
不同刚体类型的效果
DYNAMIC:动力学,碰撞了物体会发生位移
STATIC:静态
KINEMATIC:运动学,具有碰撞体和运动刚体,不会像动力学响应力的碰撞,与静态刚体类似,不同在于运动过程中会对其他物体施加摩擦力,并在接触时唤醒刚体