Transform.Rotate https://docs.unity3d.com/ScriptReference/Transform.Rotate.html有一个非常有用的界面,用于选择是否相对于世界轴或局部轴进行旋转。
在幕后,它对变换进行一些数学计算rotation
, a Quaternion
, 和另外一个Quaternion
。这个数学的确切性质会根据您选择当地国旗还是世界国旗而变化。
我怎样才能在不分配第一个的情况下进行这种数学运算Quaternion
到一个 Transform 的rotation
(浪费内存和/或时间)只是为了用它做一些数学运算?
假设我的第一个Quaternion
is Quaternion q1 = Quaternion.Euler(0f,0f,90f);
第二个是Quaternion q2 = Quaternion.Euler(90f,0f,0f)
.
将第二个沿其局部轴应用到第一个将产生旋转,将其右侧旋转为面朝下,将其正面旋转为朝右。
沿着原始轴将第二个应用到第一个将产生一个旋转,将其背面旋转为面朝下,将其顶部旋转为面朝右。
Use the Quaternion operator * https://docs.unity3d.com/ScriptReference/Quaternion-operator_multiply.html.
在 Unity 中,当您将两个四元数相乘时,它将第二个四元数(以全局轴表示)应用于第一个四元数(沿着第一个四元数之后生成的局部轴)Quaternion
).
So, 如果你想做相当于Rotate(q2, Space.Self)
, where q1
是变换的原始值rotation
, and q3
是变换的新rotation
, 你要Quaternion q3 = q1 * q2
.
如果你想申请,你该怎么做q2
to q1
沿着之前的轴q1
适用(即沿全局轴)?嗯,事实证明这相当于申请q1
沿着局部轴q2
.
举个例子,应用q2
沿着全球轴q1
将其背面旋转为面朝下,将其顶部旋转为面朝右。考虑到应用q1
沿着局部轴p2
还将其背面旋转为面朝下,将其顶部旋转为面朝右。它们导致相同的方向!
那么这意味着什么呢?如果您想申请q2
to q1
沿着之前的轴q1
应用,然后执行Quaternion q3 = q2 * q1
.
这相当于做Rotate(q2, Space.World)
where q1
是变换的原始值rotation
, and q3
是新的rotation
.
Unlike Rotate
,您可以使用此运算符相对于其父对象的轴旋转对象!如果你这样做transform.localRotation = q2 * transform.localRotation
,您将相对于父对象的轴旋转对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)