【问题标题】:How can I find the rotation of the head in Google Cardboard Unity3D?如何在 Google Cardboard Unity3D 中找到头部的旋转?
【发布时间】:2015-05-05 07:12:58
【问题描述】:

大家好,我如何在 Unity3D 中使用 Google Cardboard SDK 找到手机的旋转,就像人的头部朝向的方式一样?我需要确定它是否更朝向东方、西方或北方。我找到的是头部的旋转,还是父主相机的旋转?

【问题讨论】:

    标签: c# android unity3d google-cardboard


    【解决方案1】:

    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 。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 主摄像机游戏对象和头部游戏对象不反映游戏中的旋转。当他转动头部时,实际上是在旋转什么物体?
      • 它们如何“不反映旋转”?您是否已正确设置所有内容?摄像头是否对头部/手机的移动做出正确反应?
      • 它是“头部”对象,而不是主相机
      【解决方案3】:

      这将是 Head 对象的旋转,尽管 Main Camera 通常具有相同的旋转。

      但如果您想要相对于现实世界的方向,SDK 中不提供该信息。指南针因为有磁铁而不能使用,所以无法获得真正的方向。

      【讨论】:

        【解决方案4】:

        只需在场景中取主摄像机的旋转角度。它将为您提供头部相对于 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
        

        【讨论】:

          猜你喜欢
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 2015-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-22
          • 2021-07-16
          相关资源
          最近更新 更多