【发布时间】:2015-05-05 07:12:58
【问题描述】:
大家好,我如何在 Unity3D 中使用 Google Cardboard SDK 找到手机的旋转,就像人的头部朝向的方式一样?我需要确定它是否更朝向东方、西方或北方。我找到的是头部的旋转,还是父主相机的旋转?
【问题讨论】:
标签: c# android unity3d google-cardboard
大家好,我如何在 Unity3D 中使用 Google Cardboard SDK 找到手机的旋转,就像人的头部朝向的方式一样?我需要确定它是否更朝向东方、西方或北方。我找到的是头部的旋转,还是父主相机的旋转?
【问题讨论】:
标签: c# android unity3d google-cardboard
Cardboard 类包含一个名为 HeadRotation 的属性,它是一个四元数。
Quaternion crtRot = youCardboardController.HeadRotation;
要像在 Unity 中使用方向向量一样使用它的旋转,您只需将其乘以 Vector3.forward。
Vector3 lookDir = crtRot * Vector3.forward;
在编辑器中可视化矢量可能有助于缩小问题范围
void Update () {
// ..
Debug.DrawRay( pos, lookDir * 100, Color.blue );
// ..
}
从这里你只需要知道北在哪里,意思是面向向量。做一个 Vector3.Angle(),你就有了你的头像和北向量之间的角度。您可能希望在 y 轴设置为 0 的情况下评估这两个向量。
您还可以使用 Vector3.Dot()(点积)来确定两个向量朝同一方向看的程度。
我遇到了 HeadPosition 问题,没有正确更新。因此,如果您从 HeadPosition 操作,请记住它可能会坚持 0,0,0 。
【讨论】:
采用Head.transform.rotation - 这是用户头部的方向。
我不太确定你所说的北或西是什么意思。如果移动设备有磁力计,那么也许你可以读取它的数据来确定北在哪里,但我从来没有这样做过
【讨论】:
这将是 Head 对象的旋转,尽管 Main Camera 通常具有相同的旋转。
但如果您想要相对于现实世界的方向,SDK 中不提供该信息。指南针因为有磁铁而不能使用,所以无法获得真正的方向。
【讨论】:
只需在场景中取主摄像机的旋转角度。它将为您提供头部相对于 x、y 和 z 轴的旋转角度。
在基于 GVR 的 VR 场景中,系统会根据我们的头部运动在内部旋转摄像机。因此使用主摄像机旋转角度很容易获得头部旋转。
为此,
//local rotation of the Transform of the camera
Camera.main.transform.localEulerAngles.y
//The world Y rotation
Camera.main.transform.rotation.y
【讨论】: