代码修改碰撞分组不生效啊

  • Creator 版本: 3.5.1

  • 目标平台: 谷歌浏览器

  • 重现方式:

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率: 100%

微信截图_20220629151319

for (let index = 0; index < starNumber; index++) {

        const star:Node = instantiate(this.starPrefab);

        star.name += index.toString();

        const boxCollider:BoxCollider2D = star.getComponent(BoxCollider2D);
        console.log("0 boxCollider.group = ", boxCollider.group);
        boxCollider.group = index + 2;
        boxCollider.apply();
        console.log("2 boxCollider.group = ", boxCollider.group);

        const rigidBody:RigidBody2D = star.getComponent(RigidBody2D);
        rigidBody.group = index + 2;
        rigidBody.awakeOnLoad = false;
        rigidBody.sleep();
        this.node.addChild(star);
        const posX = Math.floor(math.random()*(this.viewWidth+1)) - this.viewWidth*0.5;
        this.initStarPos(star, posX);
        this.starArray.push(star);
        this.initBoom(star);
    }

日志打印,group确实改成了2,3,4.但是他们之间竟然还是碰撞了,我在碰撞分组里已经设置了2,3,4不能碰撞,apply函数也重新设置夹具。这是为什么?

到底哪里有问题, boxCollider.group = index + 2; 设置group的值跟碰撞分组的index是对应的吧?

微信截图_20220629152105
这是预制的group。三个星星都是同一个预制生成的节点

要在node节点上改

node节点也没有group属性啊,改哪里

image

不过你这是3.X 那不清楚了

碰撞得到的group值是2的group次方。

boxCollider.group = 2的group次方;
是这样吗

对的,你打印出来看看哇

selfCollider.tag = 2
vconsole.min.js:10 selfCollider.group = 2
vconsole.min.js:10 otherCollider.tag = 4
vconsole.min.js:10 otherCollider.group = 4
vconsole.min.js:10 ---- 星星之间碰撞了 -----

没有啊,group还是我设置的2和4啊,并没有变成2的group次方

boxCollider.group = Math.pow(2, (index+2));
改成这样确实不碰撞了
但这是为什么呢?真令人头秃

tag和group不是一样的欸,我这边是这样用的。

2赞

不知到为什么要设计成代码动态添加group的值为2的group次幂?防止重复还是混乱。搞得新手一脸懵逼

1赞

谢谢,文档上又没有看见

我去,确实是这样的,要设置成 Math.pow(2, 你的碰撞分组index),才能生效,牛逼,感谢老哥

1赞