使用Unity上的Cardboard SDK进行Recenter或Reorient视图

时间:2014-12-17 04:40:46

标签: android unity3d virtual-reality google-cardboard

使用Unity,CardboardHead脚本被添加到主摄像头并且可以很好地处理所有内容,但我需要能够重新调整"重新定位"按需查看,我看到的唯一选择是整个场景,看起来这是第一手的,我无法在文档中找到任何内容。

使用Oculus Mobile SDK(GearVR),它将是OVRCamera.ResetCameraPositionOrientation(Vector3.one,Vector3.zero,Vector3.up,Vector3.zero);虽然他们每次佩戴观众时都能很好地处理它,所以很少需要它。

4 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:6)

Cardboard.SDK.Recenter ();应该可以解决问题。

  

Recenter orientation将Cardnter.SDK添加到Receboard()功能,重置头部跟踪器,使手机当前的标题成为正向(+ Z轴)。

无法找到API / SDK的文档,但它位于release notes的v0.4.5更新中。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分: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虽然目前看起来效果不好但是如果你禁用它,你会看到主摄像机的重新调整工作。