GoogleVR переключается на картон - PullRequest
0 голосов
/ 04 июля 2019

Я создаю приложение, в котором вы можете переключаться между VR и Magic Window с помощью кнопки. Раньше я использовал старый Google Cardboard SDK, и он работал прекрасно, но теперь я перешел на GoogleVR 1.2, и у меня болит голова:
После перехода в режим VR весь мир искажается примерно на 45 градусов по оси Z (спереди горизонт на 45 градусов выше, а сзади - на 45 градусов ниже, чем должно быть при удерживании телефона прямо)

Я использую GyroController.cs (фрагмент кода ниже), чтобы заставить камеру двигаться в режиме «Волшебное окно». Когда я переключаюсь на Картон, transform.localRotation сбрасывается, но это, похоже, совсем не помогает.

Контроллер режима VR: VRController.cs:

    private void LoadCardboard()
    {
        GyroController GC = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<GyroController>();
        if (GC != null){
            GC.resetValues();   // check GyroController.cs below for this function
        } else {
            // logging error here
        }

        StartCoroutine(LoadDevice("cardboard"));

    }

    IEnumerator LoadDevice(string newDevice)
    {
            XRSettings.LoadDeviceByName(newDevice);
            yield return null;
            XRSettings.enabled = true;//(newDevice == "cardboard");

            // if (newDevice == "cardboard"){
            //     GameObject.Find("LevelLoader").GetComponent<LevelLoader>().LoadLevel("Demo_Scene");
            // } // here I tried reloading the scene but that didn't help.
    }

Волшебный оконный контроллер: GyroController.cs:

void Update () {
    #if UNITY_EDITOR
      return;
    #endif

    if (XRSettings.enabled) {
      return;
    }

    CheckDrag();

    transform.localRotation =
      Quaternion.Euler (0f, -dragYawDegrees, 0f) *
      Quaternion.Euler (90f, 0f, 0f) *
      Input.gyro.attitude *
      Quaternion.Euler (0f, 0f, 180f);
  }
public void resetValues() {
    transform.localRotation = Quaternion.Euler(0.0f, -dragYawDegrees, 0.0f);
    dragYawDegrees = PlayerPrefs.GetFloat("dragYawDegrees", 0.0f);  // this is for the next time when switching back to magic window mode to keep same yaw
  }

После переключения на картонное устройство I: EXPECT: горизонт должен быть на уровне глаз игрока. GOT: горизонт смещен по оси Z (передний горизонт на 45 градусов выше, а сзади - на 45 градусов ниже, чем должен быть)

...