cocos create碰撞组件不生效问题

534 阅读2分钟

今天在学习cocos的时候遇到了一个极为坑爹的问题,按照cocos官网文档上写的碰撞组件在碰撞时不会触发我们的onCollisionEnter方法,这个方法里只写了一个console.log方法,不存在方法内部报错导致不显示的问题,在搜索的时候有位博主给出了一些检查意见:Cocos 物理碰撞不触发的坑,大体上需要检查以下内容:

  1. 该资源除了添加碰撞组件外还需要添加刚体组件,否则不会触发碰撞回调函数

在这里插入图片描述 2. 检查是否开启全局刚体碰撞检测,该检测项是默认关闭的

// 虽然觉得会走到这一步的人这里应该都没问题,但还是加一下
cc.director.getCollisionManager().enabled = true;
cc.director.getPhysicsManager().enabled = true;
  1. 如果你在开启全局刚体碰撞检测时使用的是cc.director.getPhysicsManager().enabled = true;,那么在添加回调函数时应该用另一套回调
	// 只在两个碰撞体开始接触时被调用一次
    onBeginContact: function (contact, selfCollider, otherCollider) {
      console.log('有人碰到了玩家');
    },

    // 只在两个碰撞体结束接触时被调用一次
    onEndContact: function (contact, selfCollider, otherCollider) {
    },

    // 每次将要处理碰撞体接触逻辑时被调用
    onPreSolve: function (contact, selfCollider, otherCollider) {
        
    },
    // 每次处理完碰撞体接触逻辑时被调用
    onPostSolve: function (contact, selfCollider, otherCollider) {
        
    }

这些代码应该都是在需要碰撞的刚体添加的脚本组件里,而不是在场景内加载(我真的在场景里试过写碰撞回调),但开启碰撞是可以写在场景配置里的 但以上都没有真正解决问题,我决定再仔细看一遍cocos的官方文档,直到我看到这么一句话:需要注意的是,一个节点上的碰撞组件,无论如何都是不会相互进行碰撞检测的。 在这里插入图片描述 当场裂开,马上去检查分组:两个组件的分组都是一样的stone, 在这里插入图片描述 把其中一个分组换成其他名字之后就好了 在这里插入图片描述 所以总结一下,有官方文档的情况下遇到问题还是多仔细看看官方文档,特别是在官方文档写得这么良心的情况下 顺便附一个cocos的官方API官方社区