通过欧拉角设置物体的角度问题

关贴

经过多番尝试,已自己寻找到了解决方案,一波三折,此贴保留供有类似问题的人参考。

问题总结来说,是2D(地面、水面等)和3D结合开发时,在遇到引擎bug时,3D模型的欧拉角旋转问题

另外说一个2.4.6 3D刚体的BUG,即刚体受到冲量影响后的一小段时间内,刚体无法响应setRotation方法,请后来者注意避坑,不过2.4的3D游戏很少。

还有一个关于3D粒子的bug,如果在刚体的node下,添加3D粒子子节点,刚体node将完全不响应setRotation事件,直接挺尸。解决方案是粒子和刚体node做同层级,移动刚体的时候顺带着粒子即可。

还有,2.4的物理模块真的是提高血压的法宝。

30楼根据@468179984 做的demo改了一个符合2D、3D结合开发的场景的demo,但这个我整理后的demo还有个问题,即模型的X、Y轴无法与2D统一。

@468179984 以极快的手速撸了一个demo出来,真乃神人也。

1赞

lastAngle 求船的当前角度 代码怎么写,只要能获得船的实际角度,确实能在旋转模型的时候保证摇杆和船的方向一致,我数学是语文老师教的,菜得一批

你这问题出在 lastangle 与船真实的角度不一致,

在 let rotateangle = this.lastangle - this.current_angle;之前
this.lastangle 就是错误的数值

let rotateangle = 船的真实角度 - this.current_angle;
计算出来再用四元数计算,(防止0度与360度倒转问题);

是的,lastAngle的错误是在冲量发生后,操作摇杆导致的,因为船在冲量后的挺尸状态不响应setRotation,但lastAngle却时刻都在记录着角度,这其实应该算是个引擎的bug?被冲量后,为什么就有一小段时间不执行setRotation了呢。
求写出

的计算方法,就是卡在这

你为啥要自己来算船的真实角度,无法通过模型本身的属性,来获得他当前的角度么?

这个问题我捣鼓了两天了,现在脑子一团浆糊,全是豆腐脑。

因为船的刚体有bug,船在被冲量瞬间打击后,会出现不执行setRotation,从而导致记录的角度出现偏差。因为我是用记录角度减去现在的角度,然后四元运算,让船旋转这个角度差。为了保证摇杆和船的方向一致,必须知道船的真实角度,或者不知道真实角度也行,通过

这种方式写死方向,但Y 和 Z默认有90度,这种旋转写法不知道怎么计算

都是在尝试的方案

有没有要求船旋转到目标角度需要缓动旋转。而不是直接设置

如果能有缓动那就更好了,摇杆操作船本身就不合理,应该是方向盘,也就是船舵,这样摇杆转到哪里,船头立刻转到哪里的方式本身体验就不好,但我又没有办法写出缓动的方法来

如果可以直接设置。如果不计算角度差。直接计算遥感角度。直接代入到船的角度不可以吗?

对对,我就是想达到这样的效果

就像这种,直接把摇杆角度代入,写出船的角度

但我不知道具体怎么写,因为船本身的旋转属性不是 X0 Y0 Z0,而是X=0 Y=90
Z =90

你这个只有一个绕一个轴的方向旋转。也不存在欧拉角触发万向锁的问题。直接用欧拉角去算就好了。不用四元素。船的默认角度多了90.其实也可以换算。你假设还不知道。直接再外层再包一层空节点。旋转属性都是0 .或者直接找美术让他给你调整模型。

y90 和 z90的原因是为了 让2D的水背景和 3D船 统一,这样移动船只需考虑X和Y轴,没有Z轴的事了,但旋转起来我彻底乱了,一团浆糊。

调整模型我现在有点恐惧,因为要用blender去调整,还要调整节点,搞刚体等,最重要的是2.4.6的fbx导入很乱,导入一次贴图就丢一次,还要一个个的绑,gtlf也没法用,还只能fbx

额。。直接把遥感角度设置给模型的欧拉角。如果不对。你看一下是不是正好相反或者怎么样。去-90或者+90 或者+180 -180

试过了,this.shipNode.eulerAngles = cc.v3(0, -this.current_angle, 0);
以这样的形式,x从90 -90 180 -180 Z 从90 -90 180 -180 都写过,
最好的情况是
this.shipNode.eulerAngles = cc.v3(0, -this.current_angle, -180);
还贴合点
船自身旋转对了,但船90度栽在水面里。

如果
this.shipNode.eulerAngles = cc.v3(0, -this.current_angle + 90, -180);

也不是恶赖引擎,如果不是冲量导致船挺尸(和其他碰撞后弹走的时候也有一段时间的挺尸时间)也不会手忙脚乱的来处理角度问题。
我实在不想去看引擎的代码了。


我的是laya cocos应该差不多了。

感谢,但也还是没有欧拉角带角度的计算,算了,我去找引擎里关于船挺尸的原因吧,不挺尸就不会有这个bug,感谢各位的分析和协助 @468179984 @1261414791 @tjoxcode

或者找找挺尸的规律,再或者受到冲量的时候就不允许控制。

我觉得有冲量的时候,不能操控挺好的

RF93X%Z1ULTAGN8)O}XC4 R5QA~E~4WLN(F4JFSX@Z(V M{W5Y7DP0@5@UHGW87IVN8
额。是这样吗?我这边挺正常的。

Cocos Creator | NewProject 你看看是不是你要的效果
项目发你了 cocos 3.3.2版本的
ship.zip (2.5 MB)

2赞