【问题标题】:Google Cardboard in Unity: How can I set the Head's rotation?Unity 中的 Google Cardboard:如何设置头部的旋转?
【发布时间】:2016-08-22 17:08:57
【问题描述】:

好的,我已经尝试了所有方法,但我正在使用 Unity3D 中的 Google Cardboard 创建一个 VR 应用,并且我正在尝试设置头部对象的旋转。我可以通过打印 head1.transform.localRotation 并使用 public CardboardHead head1; 获取 Head 对象将 Head 对象的旋转打印到控制台,但是与其他对象不同,我无法更改此旋转。

我意识到 CardboardHead 脚本在这里不断覆盖并设置 Head 对象的旋转:

if (trackRotation) {
      var rot = Cardboard.SDK.HeadPose.Orientation;
      if (target == null) {
        transform.localRotation = rot;

      } else {
        transform.rotation = target.rotation * rot;
      }
    }

我什至尝试改变这些值,但我只是想暂时改变头部对象的旋转,以便在我的游戏回合结束后头部对象“捕捉”到某个旋转(之后如果他们转动他们的头,Head 对象像往常一样转动)

我只想让玩家“看”某处(我希望他们面对画布)但是当我尝试像这样改变 Head 对象的旋转时:

head1.transform.rotation = new Quaternion(0.0f,0.0f,0.0f,0.0f);

head1.transform.localRotation = new Quaternion(0.0f,90.0f,70.0f,80.0f);

什么都没有发生。 Head 对象保持在最初设置的旋转中,看起来是 (1.0,0.0,0.0,1.0)。为什么是这样?如何更改头部旋转以使用户面向画布/指向设定的方向?

【问题讨论】:

    标签: unity3d rotation google-cardboard virtual-reality


    【解决方案1】:
      head1.transform.localRotation = new Quaternion(0.0f,90.0f,70.0f,80.0f);
    

    我怀疑这是一个有效的四元数,更可能是欧拉旋转:

      head1.transform.localRotation = Quaternion.Euler(90.0f,70.0f,80.0f);
    

    您最好的办法是同时停用 Cardboard,这样它就不会试图覆盖旋转。您将拥有一个 HeadController 来激活 GoogleCardboard 或其他基于状态的脚本。这也可以保持 GoogleCardboard 的清洁。

    【讨论】:

    • 我尝试了欧拉但没有成功。我将如何激活或停用脚本?鉴于我想在用户返回到这个原始位置后返回到 GoogleCardboard 正常的头部跟踪,你会建议在计时器上停用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多