刚体组件 | Cocos Creator

物理事件 | Cocos Creator

  1. 碰撞分组问题
  2. 其他地方调用和自身调用问题
  3. 不同刚体类型的效果

碰撞分组问题

  1. 刚体的碰撞分组默认是 DEFAULT,为不同的物体分为不同的组:PlayerEmemy
  2. 不同的碰撞分组,在碰撞检测时才有效果

    碰撞分组.PNG

    刚体分组设置.png

其他地方调用和自身调用问题

  1. 其他地方调用,比如在父级调用子级,不要传递 this
  2. 自身调用,默认传递 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:运动学,具有碰撞体和运动刚体,不会像动力学响应力的碰撞,与静态刚体类似,不同在于运动过程中会对其他物体施加摩擦力,并在接触时唤醒刚体