【问题标题】:Change transform rotation from X to Z axis将变换旋转从 X 轴更改为 Z 轴
【发布时间】:2014-11-26 01:08:18
【问题描述】:
我有一个围绕 X 轴旋转的变换。但是在将此旋转转移到另一个变换时,我希望它进行完全相同的旋转。但随后围绕 Z 轴。
但是,这种旋转不是“旋转”,它只是从外部编辑旋转的变换。所以我必须旋转原始变换以匹配第二个变换,但要考虑旋转。
下图中的轴:RED = X,GREEN = Y,BLUE = Z
旋转原稿:
之后应该有的旋转:
逐帧处理的正确方法是什么?
提前致谢,
笑脸
【问题讨论】:
标签:
unity3d
rotation
quaternions
【解决方案1】:
我可以给你一个答案,解决将旋转从一个轴更改为另一个轴的一般问题。
每个变换对象都有一个transform.localRotation 属性,表示变换的方向,相对于父对象的方向。如果变换没有父级,则此方向是相对于世界空间的。
Quaternion是用来表示旋转的数据类型,它有一个有用的方法叫做ToAngleAxis。
float angle;
Vector3 axis;
transform.localRotation.ToAngleAxis(out angle, out axis);
将变量angle 和axis 设置为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);
希望对你有帮助