嘿伙计们,我如何在 Unity3D 中使用 Google Cardboard SDK 找到手机的旋转,就像人头面对的方式一样?我需要确定它是否更朝向东方、西方或北方。我找到头部的旋转,还是父主相机?
4 回答
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 。
Take 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