在Unity中使用Cardboard SDK重新定位或重新调整视图

9
使用Unity,CardboardHead脚本已添加到主摄像机中,并且可以很好地处理一切,但我需要能够按需“重新居中”视图,目前看到的唯一选择是旋转整个场景,但似乎这是首要解决的问题,文档中找不到任何信息。
使用Oculus Mobile SDK(GearVR),可以使用OVRCamera.ResetCameraPositionOrientation(Vector3.one, Vector3.zero, Vector3.up, Vector3.zero)进行重置,尽管每次戴上查看器时它们都会很好地处理,因此很少需要在那里使用。
4个回答

6

CardboardHead上有一个“target”参数,可以让您使用另一个gameobject作为旋转参考,或者您可以使用虚拟父gameobject。无论哪种方式,当您想要重新对准时,您可以设置此参考对象的旋转,使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;
    }
}

6

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

重新定位方向:向 Cardboard.SDK 添加了 Recenter() 函数,可以重置头部跟踪器,使手机的当前朝向成为前向方向(+Z 轴)。

API/SDK 的文档无法找到,但是在 v0.4.5 更新的 发布说明中提到了它。


这在v0.7.0版本中曾经管用,但自从我升级到0.9.1版本后就不再起作用了。非常奇怪。 - Pedro

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 似乎不能很好地工作,但如果你禁用它,你会发现主摄像机的重新定位是有效的。


1
你可以旋转 Cardboard Main 以指向特定方向。
当我想让应用程序启动时朝向某个方向时,以下方法适用于我。由于 Cardboard Head 在启动时如果没有分配目标会指向 Vector3.zero,因此我在 Cardboard Main 的 Start() 函数中运行了一个函数,使其指向我想要的方向。
当然,如果您已经因其他原因旋转了 Cardboard Main,则可能可以通过创建 Cardboard Head 的父级(Cardboard Main 的子级)并执行相同操作来使用此方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接