Я создаю приложение, в котором вы можете переключаться между 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 градусов ниже, чем должен быть)