Unity3D轴上对象的相对旋转

时间:2015-04-23 12:00:59

标签: unity3d rotation quaternions euler-angles

在项目中,我使用IMU传感器跟踪真实玩家的手,并将转换值应用到Unity内的3D手上。

当IMU设置相对于地球磁北的Y轴方向时,在游戏中,手会在特定方向上初始化。

我想要的是计算IMU给定Y值和3D手的原始Y旋转的偏移量,以便我可以将该值减去3D模型的Y旋转(即看起来玩家的初始Y旋转与3D手牌相同。代码为:transform.Rotate(Vector3.up, offset, Space.World);

IMU发送Euler角度(做得好,因为我无法获得Gimbal锁定)

根据我的理解,我需要找出3D手的初始旋转和IMU在XZ平面(或通过Y轴)上给定初始旋转之间的角度差异

如何计算偏移?

1 个答案:

答案 0 :(得分:1)

您可以使用Quaternion.FromToRotation计算偏移量,例如:

var offset = Quaternion.FromToRotation(Vector3.up, imuUp);
transform.rotation *= offset;