setPosition不生效

初学者,遇到一个搞不懂的问题。
有个节点A设置了一个勾选sensor的碰撞器组件,想要在某个物体B碰撞时监听并修改那个物体A的position
相关代码差不多就这样。
this.collider.on(Contact2DType.BEGIN_CONTACT, this.changePosition);
changePosition() {

    let netPos = new Vec3(0, 300, 0)

    this.node.setPosition(netPos)

}

物体B有碰撞体和刚体,奇怪的是,当我成功触发了changePosition()后,log出来的坐标B.getPosition的确是(0, 300, 0),但是实际上的B的坐标并不是。
然后我经过尝试,我发现我设置了一个button手动点击去触发changePosition(),B.position确实会变成(0,300,0)。
然后我看了一下文档,再去试了一下发现当B的刚体类型只有在设置为animated的时候才能成功修改position。
总结一下问题:在勾选了sensor的节点A的碰撞回调中,修改另一个节点B的position,但是不起作用,只有把B的刚体类型设置为animated才起作用,要出现这种情况需要同时满足碰撞回调修改position的节点绑定了刚体且刚体不为animated这两个条件。
我有两个问题:1.不清楚为什么会这样? 2.我想使用dynamic类型的刚体,有什么办法能实现检测到碰撞后更改dynamic类型的刚体节点的坐标吗?