9

使用 Unity,CardboardHead 脚本被添加到主摄像头,它可以很好地处理所有事情,但我需要能够按需“重新居中”视图,到目前为止我看到的唯一选择是旋转整个场景,看起来就像这是可以直接解决的问题,我在文档中找不到任何内容。

使用 Oculus 移动 SDK (GearVR),它将是 OVRCamera.ResetCameraPositionOrientation(Vector3.one, Vector3.zero, Vector3.up, Vector3.zero); 虽然他们每次都很好地处理观众,所以很少需要在那里。

4

4 回答 4

6

CardboardHead 上有一个“目标”参数,可让您使用另一个游戏对象作为旋转的参考。或者你可以使用一个虚拟的父游戏对象。无论哪种方式,当您想要居中时,您设置此参考对象的旋转,以便 CardboardHead 现在指向前方。将此函数添加到 CardboardHead 上的脚本中(或仅将其添加到该脚本中):

public void Recenter() {
    Transform reference = target != null ? target : transform.parent;
    if (reference != null) {
        reference.rotation = Quaternion.Inverse(transform.rotation) * reference.rotation;
        // next line is optional -- try it with and without
        reference.rotation = Quaternion.FromToRotation(reference.up, Vector3.up) * reference.rotation;
    }
}
于 2014-12-17T23:23:04.827 回答
6

Cardboard.SDK.Recenter ();应该做的伎俩。

中心定位向 Cardboard.SDK 添加了Recenter() 函数,该函数重置头部跟踪器,使手机的当前航向变为正向(+Z 轴)。

找不到 API/SDK 的文档,但它位于v0.4.5 更新的发行说明中。

于 2015-08-05T22:31:00.490 回答
1

您可以旋转 Cardboard Main 以指向某个方向。

当我希望应用程序以某种方式启动时,这对我有用。如果没有分配目标,CardboardHead 在启动时指向 Vector3.zero,因此我在 Start() 期间为 CardboardMain 运行了一个函数,该函数将指向我想要的方向。

当然,如果您因为其他原因已经在旋转 CardboardMain,则可以通过创建 CardboardHead 的父级(CardboardMain 的子级)并执行相同的操作来使用相同的方法。

于 2016-05-23T21:59:52.583 回答
1

这个问题有点老了,但是对于 Google VR SDK 1.50+ 你可以做

transform.eulerAngles = new Vector3(newRot.x, newRot.y, newRot.z);
UnityEngine.VR.InputTracking.Recenter();

此外,如果您不想感到困惑,您还需要捕获 GvrEditorEmulator 实例并将其重新定位。

#if UNITY_EDITOR
        gvrEditorEmulator.Recenter();
#endif

重新定位 GvrEditorEmulator 虽然目前似乎不能很好地工作,但如果您禁用它,您会看到主摄像头的重新定位工作。

于 2017-07-10T20:15:31.837 回答