关于物理引擎碰撞点的的疑问,也不知道算不算是bug

在监听物理刚体之间的碰撞的时候,

 onCollisionObstacleBase(collision: ICollisionEvent) {
    let selfCollider = collision.selfCollider;
    let otherCollider = collision.otherCollider;
    let obstacleBaseCtrl: ObstacleBaseCtrl = otherCollider.getComponent(ObstacleBaseCtrl);

    if (obstacleBaseCtrl == null)
      return;

      cc.log('egg 接触点' + JSON.stringify(collision.contacts));
    obstacleBaseCtrl.onCollisionBirdBase(this, collision);
  }

可以通过selfCollider和otherCollider来得到自己的刚体和对方的刚体,这个是没有问题的。但是问题出现在这个
contacts数组里的
contactA 和 contactB 上,我现在发现这个碰撞点A和碰撞点B到底属于哪个碰撞体是不明确的。
有的时候 碰撞A属于selfCollider。但是有的时候这个碰撞点A是属于otherCollider的。
我目前观察到的规律貌似就是 碰撞点A 会属于 先创建的刚体。 碰撞点B会属于后创建的刚体。
不知道,有没有明确的办法得知碰撞点到底是属于 selfCollider 还是 otherCollider哦

引擎版本1.0.3
物理引擎是 cannon.js

感谢反馈,目前的确是只能通过创建的顺序来区别,后面会考虑在事件里面加个是否为A的属性来区分一下

仔细分析了一下,主要因为数据是local的,所以需要区分,不知道改成world会不会好一些,这样就不用区分AB了

搞成world的其实也不行,因为两个刚体碰撞的时候,会有一部分区域是重合的,如果你碰撞点在这个区域里的话,也没法知道这个点是属于谁的

好像othercollider跟selfcollider是反的

hi,1.2社区版 对获取碰撞点数据进行了重构,可以试试。其中增加了以下接口

1赞

getLocalPointOnA好像不能直接通过contacts调用

contacts 是数组,要在里面的元素中调用