我正在使用unity(版本2019.1.1)来构建Android / IOS应用, 我打开了一个3D项目,尽管项目中的所有场景均为2D,但视频播放器除外,该视频播放器假定具有2种模式VR和360显示
因此,我只需要一个场景的VR支持(这是视频播放器,当前使用google-vr-sdk构建)。其余场景是2D场景,不需要启用VR。
但是,如果我选择不启用VR设置(XR设置),则360视频不会通过运动传感器移动,但是该应用程序的其余部分都可以正常工作。如果我启用了VR设置,则根本看不到主屏幕。
我目前的解决方法是开发两个应用程序,一个仅包含视频,另一个包含其他功能。但是我不知道如何连接它们。我想知道是否有一种方法可以在一个应用程序中同时做这两个事情吗?如果没有,我该如何连接这两个项目?
更新:我试图将VR Player项目导出为自定义的统一软件包,然后将其导入到我的主项目中,但随后所有2D页面仍按预期工作,但播放器对动作没有响应
答案 0 :(得分:0)
从一个reddit的家伙那里找到了这个答案。这对我来说很棒! :
在XR设置中将虚拟性支持设置为在纸板上方没有设置(我假设这是纸板吗?)。
然后使用它来启动VR:
IEnumerator EnableCardboard() {
// Empty string loads the "None" device.
XRSettings.LoadDeviceByName("CardBoard");
// Must wait one frame after calling `XRSettings.LoadDeviceByName()`.
yield return null;
// Not needed, since loading the None (`""`) device takes care of
this.XRSettings.enabled = true;
}
或者使用此命令停止VR:
public IEnumerator StopCardboard(){
XRSettings.LoadDeviceByName("");
yield return null;
XRSettings.enabled = false;
ResetCameras();
Screen.orientation = ScreenOrientation.Portrait;
}
void ResetCameras() {
// Camera looping logic copied from GvrEditorEmulator.cs
for (int i = 0; i < Camera.allCameras.Length; i++) {
Camera cam = Camera.allCameras[i];
if (cam.enabled && cam.stereoTargetEye != StereoTargetEyeMask.None) {
// Reset local position.
// Only required if you change the camera's local position while in 2D mode.
cam.transform.localPosition = Vector3.zero;
// Reset local rotation.
// Only required if you change the camera's local rotation while in 2D mode.
cam.transform.localRotation = Quaternion.identity;
// No longer needed, see issue github.com/googlevr/gvr-unity-sdk/issues/628.
// cam.ResetAspect();
// No need to reset `fieldOfView`, since it's reset automatically.
}
}
}
确保将它们称为协程 现在我只需要照顾启动画面