Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 将变换旋转从X轴更改为Z轴_Unity3d_Rotation_Quaternions - Fatal编程技术网

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

Unity3d 将变换旋转从X轴更改为Z轴,unity3d,rotation,quaternions,Unity3d,Rotation,Quaternions,我有一个围绕X轴旋转的变换。但是当把这个旋转转移到另一个变换时,我希望它做完全相同的旋转。然后绕Z轴 但是,此旋转不是“旋转”,它只是从外部编辑旋转的变换。所以我必须旋转原始变换以匹配第二个变换,但要考虑旋转 下图中的轴:红色=X,绿色=Y,蓝色=Z 轮换原件: 在下列情况下,应进行旋转: 一帧一帧的正确方法是什么 提前感谢, 微笑我可以给你一个答案,解决从一个轴到另一个轴的旋转的一般问题 每个变换对象都有一个transform.localRotation属性,该属性表示变换相对于父对象方向

我有一个围绕X轴旋转的变换。但是当把这个旋转转移到另一个变换时,我希望它做完全相同的旋转。然后绕Z轴

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

下图中的轴:红色=X,绿色=Y,蓝色=Z

轮换原件:

在下列情况下,应进行旋转:

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

提前感谢,


微笑

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

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

Quaternion
是用于表示旋转的数据类型,它有一个有用的方法称为

将变量
angle
axis
设置为
localRotation
的角度和轴。
out
部分表示您正在传入一个变量,该变量将由函数设置,而不是用作输入

在这种情况下,
angle
变量就是您想要实际使用的部件。如果使用,则提供此
角度
值和所需轴,将获得与所需参数匹配的新旋转

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

float angle;
float axis;
transform1.localRotation.ToAngleAxis(out angle, out axis);
transform2.localRotation = Quaternion.AngleAxis(angle, Vector3.forward);
希望这有帮助

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