【3d物体旋转】eulerAngles 修改y值时,只能沿屏幕垂直方向旋转

#问题描述
在cocos creator 3d 1.1.0版本下,我尝试通过修改eulerAngles来控制物体“绕自己的x/y/x轴”旋转,但在物体具备初始旋转角度的情况下,设置沿y轴旋转失败。


#实验过程
我分别在物体无初始角度和有初始旋转角度两种情况下进行实验

无初始角度属性设置:


有初始角度属性设置:



1.沿x轴旋转

旋转功能实现:

update() {
        const a = Vec3.add(this.node.eulerAngles, this.node.eulerAngles, new Vec3(5, 0, 0))
        this.node.eulerAngles = a
}

1.1 无初始角度下旋转物体

效果如图:

1.2有初始角度下旋转物体

旋转轴如下图:

1.3 实验结果

物体旋转轴为 == 旋转后,物体自身的x轴 ==> 符合预期


2.沿y轴旋转

代码微调

update() {
        const a = Vec3.add(this.node.eulerAngles, this.node.eulerAngles, new Vec3(0, 5, 0))
        this.node.eulerAngles = a
}

2.1 物体无初始角度

2.2物体有初始角度

实际旋转轴:

我期望的旋转轴:

2.3 实验结果

物体旋转轴 != 旋转后,物体自身的y轴 ==> 不符合预期

###请问各位大神,如何让物体能够始终按自身的y轴(或其他指定轴)进行旋转?

使用tweent进行如下操作,最后终实验结果与上文2.2相同

tween(this.node)
            .by(2, { eulerAngles: new Vec3(0, 0, 60) })
            .by(2, { eulerAngles: new Vec3(0, 180, 0) })
            .start()

修改update方法如下,最后终实验结果与上文2.2相同

update() {
        const axis = Vec3.UNIT_Y;
        const angle = Math.PI * 0.1
        Quat.rotateAround(tempQuat, this.node.rotation, axis, angle);
        Quat.normalize(tempQuat, tempQuat);
        this.node.setRotation(tempQuat);
    }

添加一个父节点,初始轴使用父节点操控,子节点自身做旋转就可以了

感谢解答,确实可以正常操作,我使用以下代码实现:

start() {
        const a = tween(this.node)
            .by(2, { eulerAngles: new Vec3(0, 0, 90) })

        const b = tween(this.cube)
            .by(2, { eulerAngles: new Vec3(90, 0, 0) })

        a.call(() => {
            b.start()
        })

        a.start()
    }

另外,请问大佬,有办法在tween的链式调用中实现针对不同目标的缓么?
以下实现不行:

    const a = tween(this.node)
        .by(2, { eulerAngles: new Vec3(0, 0, 90) })

    const b = tween(this.cube)
        .by(2, { eulerAngles: new Vec3(0, 90, 0) })

    const c = tween().sequence(a, b)
    c.start()

这是不行的