最近我开发了一个VR项目,所以需要使用陀螺仪,这是我在团结手册中找到的代码:
// The Gyroscope is right-handed. Unity is left handed.
// Make the necessary change to the camera.
void GyroModifyCamera()
{
transform.rotation = GyroToUnity(Input.gyro.attitude);
}
private static Quaternion GyroToUnity(Quaternion q)
{
return new Quaternion(q.x, q.y, -q.z, -q.w);
}
对不起数学和英语不好,有人能给我一些指导来解释GyroToUnity
函数的含义吗?
答案 0 :(得分:1)
陀螺Input.gyro.attitude
传感器值以右手坐标返回,但Unity使用左手坐标系统。您可以阅读有关两个坐标系here的信息。
一个简单的图像,说明了差异:
GyroToUnity
函数仅用于从陀螺(右手坐标)到相机(左手坐标)的转换。当设备移动时,看起来它正在从陀螺仪传感器翻转上/下和左/右值的方向。翻转后,将返回新的翻转值,然后将其分配给摄像机。
这是转换/翻转的地方:
return new Quaternion(q.x, q.y, -q.z, -q.w);
因此-q.z
和-q.w
。减号用于翻转值。
如果执行转换或未使用GyroToUnity
功能会怎样?
如果将设备贴在脸上并抬起头,相机会向下移动,反之亦然。如果向右移动,相机将向左移动,反之亦然。这应该是相反的。这就是使用该功能的原因。
如果您自己尝试,最简单的方法就是看看发生了什么。绕过GyroToUnity
函数然后测试它。你会看到差异。
void GyroModifyCamera()
{
transform.rotation = Input.gyro.attitude;
}
现在,将其与原始版本的代码进行比较:
void GyroModifyCamera()
{
transform.rotation = GyroToUnity(Input.gyro.attitude);
}