我以前从未遇到过这样的问题,而我试图解决的所有问题都没有实现。
我们有一个使用Unity内置的Google Cardboard支持的应用程序,该应用程序已在Android和iOS上提供。该问题以前从未在Android上出现过,也没有出现在我们使用相同版本的Unity(2018.1.1)创建的其他项目中。
为每只眼睛配置单独的视口时,似乎有些困惑。纵横比已经垂直压缩,并且正在拉伸显示的图像。最重要的是,左眼和右眼似乎正面对着交叉眼睛的庄园,在这里他们应该朝着相同的方向或多或少地面对。这是代表问题的图像,在每只眼睛的当前显示区域周围绘制了一条线: iOS cardboard display
这张照片是iPhone 6的照片,但是已经在包括iPhone 8,iPhone X以及我不记得的其他一些设备上复制了。就像我之前提到的那样,这在Android上从未发生过,也没有在iOS的类似安装项目中出现。
我怀疑这与Unity场景的设置方式有关,因此我将简要介绍一下目前的工作方式。
场景1-菜单场景 这是一个完全基于UI的场景(与大多数菜单一样),并在Portrait中进行了设置。它的主摄像头仍处于标准模式(非VR)。
场景2-体验场景
该场景使用代码Screen.orientation = ScreenOrientation.Landscape
切换到“风景”视图。它在场景中具有一个摄像机,该摄像机最初处于标准模式(非VR),但是可以使用带有以下代码的按钮将其切换为VR:
public void SetStereoViewState(bool isActive) {
XRSettings.enabled = isActive;
#if !UNITY_EDITOR
// if device is a tablet (> 7" screen) always disable cardboard switch
// otherwise display only when cardboard mode is inactive
overlayCanvas.gameObject.SetActive(ScreenUtils.IsTabletDevice ? false : !isActive);
// needed to fix the aspect ratio when switching back to mono mode
vrCamera.ResetAspect();
#endif
Debug.Log("XRManager::SetStereoViewState | Enabling VR: " + isActive);
}
在此应用程序的早期版本(运行Unity 2017.2.0p2)中,这绝不是问题,也不是在2018.1.1中创建的单独项目中的问题。
到目前为止我尝试过的事情
camera.ResetAspect()
-此处用于解决将VR切换到非VR时的方面问题。我在以任何方式切换VR->非VR,非VR-> VR等时启用和禁用了此功能。我也将其延迟到下一帧,但结果没有任何改变XRSettings.LoadDeviceByName({device_name})
,在本例中为XRSettings.LoadDeviceByName("cardboard")
,但不使用{{ 1}},直到真正需要它为止。 | VR XRDevice.enabled = true
-非VR XRDevice.enabled = true
相机设置 我认为这无关紧要,因为VR可以在Android上完美运行,但这是我设置的默认摄像头: Unity camera setup
我已经考虑过设置多个摄像头(左眼和右眼),但是由于纵横比是问题之一,因此我看不到这会产生什么影响。 如果有人遇到过类似的问题并且有解决方案,或者对如何以一种很棒的方式处理这种情况有任何建议,那么。
注意: 当前,我们正在使用Unity 2018.1.1,但我也尝试了最新(当时)的2018.1.5。降级到2017.x.x的可能性不大可能是由于HttpWebRequests和苹果公司一些令人沮丧的IPv6要求,这些要求直到Unity 2018.x.x才被取消。
答案 0 :(得分:1)
已修复
问题是在人像模式下加载“纸板”模式时。这是我在应用启动时运行以解决此问题的代码:
private IEnumerator SetupCardboard() {
Screen.orientation = ScreenOrientation.Landscape;
XRSettings.LoadDeviceByName("cardboard");
yield return null;
Screen.orientation = ScreenOrientation.Portrait;
}