【发布时间】:2019-05-27 12:03:08
【问题描述】:
我在 Unity 中有一个模型,我想使用 IMU 给出的四元数来旋转它。要更改方向,我需要将对象的初始方向四元数(=Qreset)设置为 IMU 的方向(=Qimu),然后计算 Qreset 和 Qimu 之间的差异以获得新的方向。它可以工作,但是每当我设置初始方向(Qreset)时,Unity 中对象的方向总是会改变(X:-180.4,Y:21.08,Z:21.08)。我不知道为什么会这样。我如何更改此设置,以便重置时的对象方向始终为 0,0,0。这是我的代码:
void Update() {
if (Input.GetKeyDown(KeyCode.Space))
{
Qreset = Qimu;
}
transform.rotation = Qreset * Quaternion.inverse(Qimu);
}
void Splitstring(string msg)
{
string[] values = msg.Split('+');
Qimu.x = float.Parse(values[1]);
Qimu.y = float.Parse(values[2]);
Qimu.z = float.Parse(values[3]);
Qimu.w = float.Parse(values[0]);
}
【问题讨论】:
-
请注意
transform.rotation和transform.localRotation之间存在差异...您在检查器中看到的始终是localRotation,它是相对于父对象的旋转。您可能想尝试设置localRotation? -
此外,由于四元数存在的约束,通过独立设置其
x,y,z,w参数并一个接一个地更改四元数可能会导致四元数不等于(x,y,z,w)。即x*y*z必须始终等于-1。考虑使用new Quaternion(x,y,z,w)或quaternion.Set(x,y,z,w) -
@derHugo 就是这样!谢谢!
标签: unity3d 3d orientation quaternions