关于Rigidbody2D使用了fixedRotation后,球在第二次碰到桌子反弹时方向就不对了

image

是box2d吧?估计无解。锁了旋转它计算contact法线应该会有问题。
有几种方法:
1,不锁rotation
2,用kinematic刚体,将球写成子弹,每帧向运动方向发射射线,射线长度为 运动速度*时间(s * deltaTime),射中后得到normal后,计算reflect(dir, normal)得到弹射后的方向,并更新运动方向,最后速度 *= 衰减系数,就可以了。但是用box2d不建议这样做,因为没有sweep test世界查询所以不太好处理与球相交的测试,并且自己计算球之间的力也不是很方便。

锁rotation是出于什么考虑呢?

锁rotation是因为球下面加了阴影,而且阴影又是不居中的,偏右下角

这个很简单了。写个世界坐标的跟随阴影不就好了嘛。不作为球的子级。

class ShadwoCom extends Compoent {
       @property(Node)
       target: Node;
       @property(Vec3)
       offset: Vec3;

       private _p = v3();

      update() {
              this._p.set(this.target.worldPosition).add(this.offset);
              this.ndoe.setWorldPosition(this._p);
      }
}

把要跟随的球拖到target上,然后填一下跟踪时的偏移值offset,就行了。