无法对一个刚体进行3d旋转,比如设置欧拉角,或者 rotateAround

比如建一个球体,可以对球体进行3d旋转,但是给这个球体添加了 RigidBody 之后,代码就不起作用了,是怎么回事呢?如果实在不行就得把球体绑定到字节点了,这样会麻烦许多,求路过的大神答疑解惑

虽然我还没用过cocos的物理系统,但以unity的思路来说,
一但你给物体添加了物理组建,就最好不要再直接调用Node的transfrom方法了吧。
位移跟旋转都交给物理系统去计算了,如果要修改位置,调用物理引擎的move跟rotate API

creator的物理系统好像只有2d的,3d物理还不支持,所以无法把滚动这种3d的表现交给引擎

可以给个简单 demo 吗,现在的这些信息没法重现

很容易复现啊,新建一个3d球体,旋转的方法参考链接:
https://forum.cocos.com/t/3d/83088
然后运行,就会看到球可以旋转。
然后再给球加个 RigidBody 组建,再次运行,发现球就旋转不了了

ok,看到 API 了,待会做个 DEMO 追踪一下

但是有一点,刚体设置的参数,以及节点树的关系都是有可能导致这个问题的,我做的 DEMO 不一定能复现你的情况

用以上 API 搭了一个简单小 Demo,不好意思,没法重现你说的有刚体会导致没有旋转,如果还有问题,建议你还是提供一个 Demo

        /**
         * 注意 this.node._quat 改成了 _rot ,而且这个是不允许直接获取和设置的,请改用上面的 rotation
         */

        var q_tmp = new cc.Quat();
        var out_Q = cc.vmath.quat.rotateAround(q_tmp, this.node._rot, cc.v3(-1, 1, 0), Math.PI * 0.1);
        this.node.setRotation(out_Q.x, out_Q.y, out_Q.z, out_Q.w);
        
        /**
         * 请使用这种方式
         */

        // var q_tmp = new Quat();
        // var v_tmp = new Vec3(-1, 1, 0);
        // v_tmp.normalize();
        // var out_Q = Quat.rotateAround(q_tmp, this.node.rotation, v_tmp, Math.PI * 0.1);
        // this.node.setRotation(out_Q.x, out_Q.y, out_Q.z, out_Q.w);


2赞

你用的是什么版本的? 我这里是 RigidBody 组件,尝试了 v2.1.2 和 v2.2.0-alpha.5 ,两个版本的都是 RigidBody,没有你这个 cc.RigidBodyComponent

creator3d beta15 月初发的那个

搜嘎 ~

v2.1.2 和 v2.2.0-alpha5 ,还有目前 v2.*** 的都是属于 creator 的版块,如果你是使用的这些版本,请设置成 creartor 的帖子,3D 版块目前是用于 Creator 3D beta*** 版本的

好的,吴彦祖