为什么我的对象的方向统一改变?
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
The rotation of the transform in world space stored as a Quaternion.
The rotation of the transform relative to the transform rotation of the parent.
The position, rotation and scale values of a Transform are measured relative to the Transform’s parent. If the Transform has no parent, the properties are measured in world space.
=> 您在检查器中看到的通常是 localRotation
因此,如果您的对象嵌套在您要设置的Qimu
下
transform.localRotation = Qreset * Quaternion.inverse(Qimu);
另请注意 Draco18s 关于检索四元数的评论。你宁愿做
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);
}
我在 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
The rotation of the transform in world space stored as a Quaternion.
The rotation of the transform relative to the transform rotation of the parent.
The position, rotation and scale values of a Transform are measured relative to the Transform’s parent. If the Transform has no parent, the properties are measured in world space.
=> 您在检查器中看到的通常是 localRotation
因此,如果您的对象嵌套在您要设置的Qimu
下
transform.localRotation = Qreset * Quaternion.inverse(Qimu);
另请注意 Draco18s 关于检索四元数的评论。你宁愿做
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);
}