Unity Google Cardboard проблема отображения на iOS - PullRequest
0 голосов
/ 25 июня 2018

Я никогда раньше не сталкивался с подобной проблемой, и все, что я пытался исправить, ничего не дало.

У нас есть приложение, использующее встроенную поддержку Google Cardboard в Unity, которое доступно на Android.и iOS.Эта проблема никогда не возникала на Android раньше, а также не появляется в другом проекте, который мы создали с использованием той же версии Unity (2018.1.1).

Эта проблема возникает при настройке отдельных окон просмотра длякаждый глаз кажется запутанным.Соотношение сторон было сжато по вертикали и растягивает отображаемое изображение.Вдобавок ко всему, левый и правый глаз, кажется, обращены в поместье с косоглазием, где они должны смотреть более или менее в одном и том же направлении.Вот изображение, представляющее проблему, с линией, нарисованной вокруг текущей области отображения для каждого глаза: Картонный дисплей iOS

Это изображение iPhone 6, однако оно было воспроизведено нанесколько устройств, включая iPhone 8, iPhone X и несколько других, которые я не могу вспомнить.Как я упоминал ранее, это никогда не происходило на Android, а также не появляется на iOS в аналогичном проекте установки.

У меня есть подозрение, что это как-то связано с настройкой моих сцен Unity, поэтому я 'Дадим краткое описание того, как все работает в данный момент.

Сцена 1 - Сцена меню Эта сцена полностью основана на пользовательском интерфейсе (как и большинство меню) и настроена в Книге портрета.Он имеет основную камеру, которая остается в стандартном режиме (не-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"), но не включал ее с помощью XRDevice.enabled = true до тех пор, пока она действительно не понадобится.| VR XRDevice.enabled = true - Non-VR XRDevice.enabled = false

Настройка камеры Не думаю, что это актуально, так как работает VRотлично работает на Android, но вот моя настройка камеры по умолчанию: Настройка камеры Unity

Я рассмотрел вопрос о настройке нескольких камер (для левого и правого глаза), но не вижу, какэто будет иметь значение, так как соотношение сторон является одной из проблем.Если кто-то сталкивался с подобной проблемой и имеет исправление, или у него есть какой-либо совет относительно того, как подходить к ситуации по-другому, это было бы здорово.

ПРИМЕЧАНИЕ: В настоящее время мы используем Unity2018.1.1, но я также пытался до самой последней (в то время) 2018.1.5.Понижение до 2017.xx на самом деле не возможно из-за HttpWebRequests и несколько разочаровывающих требований Apple к IPv6, которые нарушаются до Unity 2018.xx

1 Ответ

0 голосов
/ 25 июня 2018

FIXED

Проблема заключается в загрузке режима «картон» в режиме «Портрет». Вот код, который я запускаю при запуске приложения, чтобы решить эту проблему:

private IEnumerator SetupCardboard() {
    Screen.orientation = ScreenOrientation.Landscape;
    XRSettings.LoadDeviceByName("cardboard");
    yield return null;
    Screen.orientation = ScreenOrientation.Portrait;
}
...