2.0.9 物理引擎 PhysicsCircleCollider碰撞体bug

  • Creator 版本:2.0.9

  • 目标平台: 所有平台

  • 详细报错信息,包含调用堆栈:无

  • 重现方式:
    0,打开物理引擎,和调式界面
    1,代码生成一个圆形预制体,添加RigidBody和PhysicsCircleCollider组件,设置PhysicsCircleCollider组件radius属性为1,可是在场景中,该物体的PhysicsCircleCollider radius范围依然是默认的52.
    @property(cc.Prefab)
    prefab:cc.Prefab = null;
    onLoad() {
    const node = cc.instantiate(this.prefab)
    node.parent = this.node
    const rg = node.addComponent(cc.RigidBody)
    const co = node.addComponent(cc.PhysicsCircleCollider)
    co.radius = 1;
    rg.gravityScale = 5;

      cc.log(co.radius)
    

    }

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :windows

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

这不是bug,box2d就这尿性。

还有一个bug,
准备:圆形预制体增加RigidBody和PhysicsCircleCollider组件,设置好属性
0,打开物理引擎,和调式界面
1,代码生成一个该圆形预制体,设置该预制体的父节点为testNode,把该预制体的RigidBody.active设置为false、PhysicsCircleCollider.enabled设置为 false,
2,testNode执行向上移动动作,可预制体并没有动
2,换个方式执行第2步,预制体执行向上移动动作,预制体又动了,这是为什么呢?

脚本如下:
@property(cc.Prefab)
prefab:cc.Prefab = null;

@property(cc.Node)
testNode:cc.Node = null;

onLoad() {
    const node = cc.instantiate(this.prefab)
    node.parent = this.testNode
    const rg = node.getComponent(cc.RigidBody)
    node.getComponent(cc.PhysicsCircleCollider).enabled = false;
    node.getComponent(cc.RigidBody).active = false;

    this.testNode.runAction(cc.moveBy(2,0,200))
    // node.runAction(cc.moveBy(2,0,200))

    this.scheduleOnce(()=>{
        cc.log('diao')
        node.getComponent(cc.RigidBody).active = true;
        node.getComponent(cc.PhysicsCircleCollider).enabled = true;
        rg.applyLinearImpulse(cc.v2(-100,0),rg.getWorldPosition(),true)
    },3)
}

你这说法不对,如果我们在公司做个项目,我们引用了一个库,因为这个库产生了一些问题,难道就说这不是bug吗?
如果引擎组知道这个问题,应该在文档上注明,用到这些组件时可能会遇到的问题。

应该需要 co.apply();

谢哥们提醒,注意这个api了,如果不是很熟悉这个组件,有多少人留意到这个函数…

我是使用2.1.2,但想要用程式控制cc.RigidBody开关,但使用这行无作用。
node.getComponent(cc.RigidBody).active = true;
想请问一开始就丢到节点上是无法控制的吗?

node.getComponent(cc.RigidBody).active = true;
2.0.9版本用上面这句代码是有用的,不知道你那为什么没作用

既然你开启了物理引擎,就要按物理碰撞的方式移动,首先了解的动态刚体和静态刚体的区别。如果是静态刚体可以控制moveto,如果是动态刚体需要赋值线速度进行移动。
aplly针对physics使用。

哥们,你看清楚,我是刚体组件active设为false,才执行球体父节点的moveto动作,父节点动了,可球体不会动。
换种方式,指定球体的moveto动作,球体动了。
理解意思了吗?

node.removeComponent(cc.RigidBody)

引擎组的大佬

https://forum.cocos.com/t/topic/64031
用移除刚体的办法 实现效果吧。

添加apply()也没用跟新radius值啊

可以了,是我其他脚本没更改过来