Unity - включить поддержку VR только для одной сцены - PullRequest
0 голосов
/ 07 мая 2019

Я использую Unity (версия 2019.1.1) для создания приложения Android / IOS, я открыл 3D-проект, хотя все сцены в проектах являются 2D, за исключением видеоплеера, который предполагает 2 режима VR и 360display

Так что мне нужна поддержка VR только для одной сцены (это видеоплеер, который в настоящее время собран с google-vr-sdk).Остальные сцены являются 2D и не требуют включения VR.

Однако, если я решу не включать настройки VR (настройки XR), видео 360 не перемещается через датчики движения, а в остальную часть приложения.работает отлично.Если я активирую настройки VR, я вообще не вижу домашнего экрана.

Мой текущий способ - разработать два приложения, одно из которых содержит только видео, а другое - остальные.особенности.Но я не знаю, как их соединить.Я хочу знать, есть ли способ сделать оба в одном приложении?и если нет, то как я могу соединить 2 проекта?

ОБНОВЛЕНИЕ: Я попытался экспортировать проект VR Player в виде пользовательского пакета Unity, а затем импортировать его в свой основной проект, но опять же все 2D-страницы работают как положеноно игрок не реагирует на движения

1 Ответ

0 голосов
/ 07 мая 2019

Нашел этот ответ от парня из 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.
        }
    }
}

Обязательно называйте их сопрограммами, теперь мне нужно только позаботиться о заставке

...