关于碰撞事件onCollisionEnter的疑问

回调中event.othercollider跟selfcollider发生了交换。

  console.log(event.selfCollider.node);
    console.log(event.otherCollider.node);
    if (event.otherCollider.node.name == "bulletball") {
        return
    }
        console.log("----");
        loader.loadRes("prefabs/hole", Prefab, (err, prefab) => {
        if (!err) {
            let node = instantiate(prefab);
            console.log(event.selfCollider.node);
            console.log(event.otherCollider.node);
           
            console.log(event.selfCollider.node.children.length);
            node.forward = event.contacts[0].normal;
            node.parent = event.selfCollider.node;     
            let posWorld = event.contacts[0].contactB;
            posWorld.add(event.contacts[0].normal.clone().negative().multiplyScalar(0.01));
            // 设置坐标
            node.setPosition(posWorld);
       
           console.log(node.parent.children.length);
            console.log(event.selfCollider.node);
            console.log(event.otherCollider.node);

后台输出结果是:

经多次测试都是这样的结果。contacts参数还没查看,不知道contact改了没有

contacts参数倒是没变

看这个分析不出什么问题,可以给个复现demo吗

项目不能上传。不过场景里面就几个collider,一个相机旋转,一个发射小球。小球身上有个这个检测。没别的东西。彦祖你先看看,不行周末了我回家新建个重现下传上去。

123.rar (696.1 KB)

新的发现:同一段代码改到碰撞的两个节点上,
在运行顺序下:1.主撞节点第一次的event时正确的
2.被撞节点的event开始改变
3.再次运行到主撞节点,event就改变了,变成2的状态。
4.再次运行到被撞节点,event保持2的时候的状态。

有空麻烦帮忙看下。

事件是正常的,物理事件对象是复用的,这段代码需要改一下

get也就是先把首次捕获的记下来