繁体   English   中英

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

[英]why does the orientation of my object change in unity?

我在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]);
}

rotation之间有区别

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

localRotation

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

并注意在“ 变换”检查器中

相对于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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM