我在Unity中有一个模型,我想使用IMU提供的四元数来旋转。要更改方向,我需要将对象的初始方向Quaternion(= 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]);
}
答案 0 :(得分:1)
以四元数存储的世界空间中变换的旋转。
相对于父对象的变换旋转的变换旋转。
请注意,在Transform Inspector
相对于Transform的父对象测量Transform的位置,旋转和比例值。如果Transform没有父对象,则在世界空间中测量属性。
=>您在检查器中看到的通常是localRotation
因此,如果您的对象嵌套在Qimu
下,则要设置
transform.localRotation = Qreset * Quaternion.inverse(Qimu);
还请注意Draco18关于检索四元数的评论。您宁可
void Splitstring(string msg)
{
string[] values = msg.Split('+');
var x = float.Parse(values[1]);
var y = float.Parse(values[2]);
var z = float.Parse(values[3]);
var w = float.Parse(values[0]);
Qimu = new Quaternion(x, y, z, w);
}