如何在 Google Cardboard Unity3D 中找到头部的旋转?

How can I find the rotation of the head in Google Cardboard Unity3D?

嘿伙计们,我如何在 Unity3D 中使用 Google Cardboard SDK 找到 phone 的旋转,比如人头朝向的方向?我需要确定它是更朝向东方、西方还是北方。我是找到头部的旋转,还是父主相机?

采取 Head.transform.rotation - 这是用户头部的方向。

我不太清楚你所说的北方或西方是什么意思。如果移动设备有磁力计,那么也许你可以读取它的数据来确定北方在哪里,但我从来没有这样做过

Cardboard class 包含一个名为 HeadRotation 的 属性,它是一个四元数。

Quaternion crtRot = youCardboardController.HeadRotation;

要像在 Unity 中一样使用方向向量的旋转,您只需将它乘以 Vector3.forward。

Vector3 lookDir = crtRot * Vector3.forward;

在编辑器中可视化矢量可能有助于缩小问题范围

void Update () {
  // ..
  Debug.DrawRay( pos, lookDir * 100, Color.blue );
  // ..
}

从这里你只需要知道北方在哪里,即面向矢量的意思。做一个 Vector3.Angle() 并且你有你的头像和 North 的矢量之间的角度。您可能希望在将 y 轴设置为 0 的情况下评估这两个向量。

您还可以使用 Vector3.Dot()(点积)来确定两个向量朝向同一方向的程度。

我遇到了 HeadPosition 的问题,它没有正确更新。因此,如果您从 HeadPosition 进行操作,请记住它可能会坚持 0,0,0 。

这将是 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