将变换旋转从X轴更改为Z轴

时间:2014-11-24 15:46:42

标签: unity3d rotation quaternions

我有一个围绕X轴旋转的变换。但是在将此旋转转移到另一个变换时,我希望它执行完全相同的旋转。但那时绕Z轴。

然而,这种旋转不是“旋转”,它只是一种从外部编辑旋转的变换。所以我必须旋转原始变换以匹配第二个变换,但要考虑旋转。

下图中的轴:RED = X,GREEN = Y,BLUE = Z

旋转原件:

enter image description here enter image description here

旋转后应该有:

enter image description here enter image description here

一帧一帧的正确方法是什么?

提前致谢,

笑脸

1 个答案:

答案 0 :(得分:0)

我可以给你一个答案,解决将旋转从一个轴改变到另一个轴的一般问题。

每个变换对象都有一个transform.localRotation属性,表示变换的方向,相对于父方向。如果变换没有父变换,则此方向与世界空间相关。

Quaternion是用于表示轮换的数据类型,它有一个名为ToAngleAxis的有用方法。

float angle;
Vector3 axis;
transform.localRotation.ToAngleAxis(out angle, out axis);

将变量angleaxis设置为localRotation的角度和轴。 out部分意味着您要传入一个由函数设置的变量,而不是用作输入。

在这种情况下,angle变量是您想要实际使用的部分。如果您使用Quaternion.AngleAxis,提供此angle值和所需的轴,则会获得与您所需参数匹配的新轮换。

例如:要将transform1的任意旋转更改为transform2上的Z轴旋转,您可以使用

float angle;
float axis;
transform1.localRotation.ToAngleAxis(out angle, out axis);
transform2.localRotation = Quaternion.AngleAxis(angle, Vector3.forward);

希望这有帮助