creator3D 1.2.0新版本 BoxCollider 设置setGroup报错

let collider = this.node.getComponent(BoxCollider);
collider.setGroup(Constants.CarGroup.MAINCAR);
collider.setMask(Constants.CarGroup.OTHERCAR);
报错:
debug.ts:97 [Physics]: Please make sure that the node has been added to the scene
请问这个怎么解决呢?我有把节点添加到scene中的!求大神帮忙看下

把这段代码放到start函数里运行

你这里麻烦断点跟进去看下具体报错的地方。再检查看看这个节点是不是在场景里的节点

对了 1.2 的话在项目设置这里关于物理的部分,是否使用碰撞矩阵这个要取消勾选,不然运行时会提示你方法废弃,同时碰撞失效

南辕北辙……

我原来放onLoad,改start就行

请问为什么要取消碰撞矩阵,我搞了一整天,子弹打击物体就设置个Group然后就没法触犯Ontrigger事件,最后发现时这个设置的问题,到底为啥啊?我就想要个unity中Tag一样的东西,预先对场景中不同物体批量设置Tag,让子弹碰到不同tag物体,我一个switch,case处理就行了,麻烦问一下,这个到底要怎么设置,到底是用SetGroup还是用SetMask还是用Layer?或者有别的方法?

1.2的碰撞矩阵和setMask/setGroup这些是两套机制,贴主用的是setMask这套的,所以要禁用掉(这个在 3.0 会优化成一套东西)

如果是要刷选碰撞的对象,可以考虑根据对象的名称来, 一样是 switch ,把 tag 改成节点 name 就行;

另外 setGroup 有可能会直接刷选掉不匹配的对象(还取决于其它对象的掩码),这是用来做性能优化的,gruop 不能用来做为对象的唯一ID

但是场景美术建立的场景,节点名称都是有特殊意义的,我不可能再去场景中把所有的物体名称都改了啊?是吧
我目前的做法是给所有的需要碰撞的物体加个脚本,然后设置一个类似tag的属性,就是你们的Group,这个在场景中挂载的时候手动批量配置这个值,在onload中setGroup = 这个配置的Tag,然后碰撞的时候再用getGroup去判断,同时我取消了碰撞矩阵的勾选,这样可以吗?
还有你说不能用作唯一ID,我并不是匹配唯一ID,而是一类物体,比如我场景中所有的桌子,tag为A,椅子为B,我是不同类的做不同处理啊,但是一个Tag都是一样的行为。

可以的,把掩码设置正确就行

正确就是只要是2的整数幂就行了是吗?

你可以先全部设置成 -1

啊??全部设置成-1?那我怎么判断,我打到不同tag物体的要有不同的行为,都是-1了,我怎么区分?

分组和掩码是不同的东西,通过 setMask 来设置

是我理解能力有问题吗,本来我以为都清晰了,怎么突然又设置成-1,又来个setMask,搞得我越来越糊涂了,这么说吧可能你们引擎内部有不同的算法,作为使用者来看,我现在是不是可以认为分组和掩码只是Group和Mask这两个单词拼写的区别,使用方式都只是set然后get就行了是吧。
我可以这么理解吗,Group和mask不过是Node上的一个属性值,就像我定义了一个变量,我可以设置任何值,然后用的时候我就取这个值,就switch,case处理就行了?
还有就是他们是成对出现,我肯定不会group和mask混用,感谢大佬赐教

mask 用来标记能够与自己检测的 group (默认只会标记 DEFAULT),所以设置为 -1 是为了让所有group都会相互检测,并让事件可以触发

关于 group 和 mask ,你可以这么理解

group 用于指明对象的种类
mask 用于指明对象可检测的种类,只有可检测的才会有产生事件、碰撞

放在start里面碰撞会失效呀 楼主怎么解决的