使用Unity,CardboardHead脚本被添加到主摄像头并且可以很好地处理所有内容,但我需要能够重新调整"重新定位"按需查看,我看到的唯一选择是整个场景,看起来这是第一手的,我无法在文档中找到任何内容。
使用Oculus Mobile SDK(GearVR),它将是OVRCamera.ResetCameraPositionOrientation(Vector3.one,Vector3.zero,Vector3.up,Vector3.zero);虽然他们每次佩戴观众时都能很好地处理它,所以很少需要它。
答案 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虽然目前看起来效果不好但是如果你禁用它,你会看到主摄像机的重新调整工作。