3.6.0 动态加载的碰撞组件enabled=false的情况下也会触发碰撞回调,必出,提供demo

用的内置物理模块,碰撞组件(Collider2D)修改enabled为false后,调用了apply()方法,但碰撞回调还是会触发,我在回调函数里面断点看到的enabled值是false,既然是false为何还会参与碰撞呢?
image


2bc5d825e7107c8c9ba519744371c25
1668070549690

测试没复现。

回头我写个测试例子再试下,不知道是不是因为从对象池里面拿出来造成的。
onBeginContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null)
目前游戏中碰撞回调里面断点看到的的selfCollider.enabled 为false,另一个otherCollider.enabled为true,说明设置enabled有效,既然是false的话,应该不会走到碰撞回调才对,但我在碰撞回调里面确实断下来了

image
做了一个这样的测试,把碰撞组件默认enable为false或者动态改为false,好像是正常的,在enable为false时不再输出日志
image
自己项目唯一跟这个区别的就是这个测试是碰撞节点直接在场景上,我项目中是通过对象池动态添加的节点,同样的输出语句控制台输出:
1668240660477

我不确定是不是对象池动态加载的节点是不是碰撞组件和默认场景上的节点碰撞组件方式不同,这个我再尝试模拟下看看了

我写了一个测试demo,复现了,必出,动态加载的节点,不管碰撞组件是否激活都会触发碰撞回调
ColliderDemo.zip (34.1 KB)

直接 web 预览看还是有回调,

所以说简单的场景上放几个碰撞组件测试发现不了问题的,动态加载prefab里面带碰撞组件是实际项目中常用的操作,碰到这个bug让人很无语的,虽然说可以动态创建碰撞组件来绕过这个问题,但遇见碰撞组件比较多,参数复杂点的就比较麻烦了

又动态设置了 group 引起的,我反馈下

同遇到这个问题,我直接在子弹上挂载了一个脚本,碰撞之后destroy()或者enable=false,,,都会有大量报错