为什么我的物体的方向在统一中变化?

问题描述 投票:0回答:1

我在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]);
}
unity3d 3d orientation quaternions
1个回答
1
投票

rotation

世界空间中变换的旋转存储为四元数。

localRotation

变换相对于父变换旋转的旋转。

并注意在Transform Inspector

变换的位置,旋转和缩放值是相对于Transform的父级测量的。如果Transform没有父级,则在世界空间中测量属性。

=>你在Inspector中看到的通常是localRotation

因此,如果您的对象嵌套在您想要设置的Qimu

transform.localRotation = Qreset * Quaternion.inverse(Qimu);

另请注意Draco18s关于检索Quaternion的评论。你宁愿做

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.