在Unity3D中将循环旋转值与运动值相关

问题描述

我正在尝试模拟从螺栓上拧下螺母。对我来说,这意味着跟踪y旋转并根据螺母的旋转方向在y轴上移动螺母。问题在于,欧拉角在0到360之间循环,四元数在-1和1之间循环。这使我的螺母只能在一个旋转中上下移动。

我已经考虑过尝试捕捉跳跃(即检测到rotation.y从359跳到1,顺时针旋转)并对其进行补偿,但是在很多情况下,这并不是很好。对我来说最好的方法是什么?任何帮助表示感谢,谢谢。

解决方法

我知道它一定更复杂。过去,我总是分开处理平移和旋转-恐怕没有使用Unity。我只能说这是一个螺母+螺栓,因此螺母的旋转与螺栓轴上的偏移量为1:1。您需要对偏移量进行数学标准化。这意味着可以将输入旋转计算回到轴偏移(扭转与偏移的比率),然后向前进行以获得螺母的最终旋转(您不能因此而措手不及,因为您正在重新计算旋转角度)每次)。

我从评论中删除了此内容,因为我不认为自己很清楚。基本上,旋转角度是否为20度都没有关系,而您想要应用-50度。基本上,您将在轴上或轴下应用价值50度的偏移量,然后向前移动以获取螺母的角度-因此您仍将以330度旋转结束,但是该旋转不会起到夹住螺母的作用。轴上的位置。

按照此模型,您的杆身可以长40mm或1m长,并且可以一直沿螺母进行缠绕-您只需要头部处于停止状态,并且需要说的是最后撤消。