0
我需要旋转一个物体以相对于现实世界进行精确的旋转。因此调用Input.gyro.attitude
将返回一个表示设备位置的四元数。另一方面,这迫使我根据这个四元数计算每一个旋转作为默认旋转。 一种简单的方法来设置朝上将是以下一些对象:Unity c#四元数:用z轴交换y
Vector3 up = Input.gyro.attitude.eulerAngles;
...
transform.rotation = Quaternion.Euler(up.x, up.y, up.z);
此旋转up.z
围绕Z,然后围绕x up.x
,和up.y
围绕y。
我的问题是,坐标系不太正确,在我的应用程序中,交换了y和z轴(我使用Vuforia,所以它总是相对于标记),这意味着围绕z的旋转导致绕y旋转,反过来。这里事情变得困难:显然
transform.rotation = Quaternion.Euler(up.x, up.z, up.y);
失败,因为这还是第一次旋转围绕Z的,但现在up.y
。正确的顺序是创建一个旋转,首先围绕y旋转,然后是x,然后是z。
由于欧拉角是从四元检索,
transform.rotation = Quaternion.identity;
transform.Rotate(0, up.eulerAngles.z, 0);
transform.Rotate(up.eulerAngles.x, 0, 0);
transform.Rotate(0, 0, up.eulerAngles.y);
不会工作,当然。
但是,我找不到办法做到这一点。我可以忽略一些东西吗
谢谢,那个人做到了!四元数是一个痛苦的处理... –