protected virtual void OnApplicationPause(bool pauseStatus) { if (m_IsPaused != pauseStatus) { m_IsPaused = pauseStatus; // XDevicePlugin.setHMDRotation(Quaternion.identity); if (m_IsPaused) // OnPause() { } else // OnResume() { AlignHmd(); } } }
public virtual void TryAlignHmd() { if (VRContext.currentDevice == null) { return; } float curYaw = GetRawYaw() + m_YawOffset, betterYaw = GetBetterYaw(); float yawOffset = Mathf.Repeat(betterYaw - curYaw, 360.0f); // if (yawOffset > 180.0f) { yawOffset = 360.0f - yawOffset; } // // HMD mounted events if (_wasUserPresent && !VRContext.currentDevice.isUserPresent) { //HMDUnmounted } if (!_wasUserPresent && VRContext.currentDevice.isUserPresent) { //HMDMounted _needAutoRecenter = true; goUIAutoRecenter.SetActive(true); } _wasUserPresent = VRContext.currentDevice.isUserPresent; // if not getHmdYaw, countSameHmdYaw++ if (getHmdYaw() == lastHmdYaw) { countSameHmdYaw++; } else { countSameHmdYaw = 0; } lastHmdYaw = getHmdYaw(); // Untill lookat camera,do AutoRecenter if (_needAutoRecenter && GetHmdSleepTime() > 0.5f && (getHmdYaw() > 320.0f || (getHmdYaw() < 40.0f && getHmdYaw() > 0.0f)) && countSameHmdYaw < 20) { if (yawOffset >= GetAutoRecenterMinAngle()) { m_YawOffset = betterYaw - GetRawYaw(); // TODO : Align Notice m_LastAlignHmdTime = Time.time; if (m_UiAlign != null) { m_UiAlign.fillAmount = 0.0f; m_UiAlign.gameObject.SetActive(true); } } _needAutoRecenter = false; goUIAutoRecenter.SetActive(false); } // Call AlignHmd() without UIFade. if (Time.frameCount == m_ForceRecenterHmdFrameCount) { if (XDeviceGetHmdYaw(m_TempHmdRotation) < 0.0f) // Next frame. { m_ForceRecenterHmdFrameCount = Time.frameCount + 1; betterYaw = 0.0f; } else // Done. { RecenterAllControllers(curYaw); } } else { if (XDeviceGetHmdYaw(m_TempHmdRotation) < 0.0f) // No result. // betterYaw=0.0f; { } } // Tell the plugin hmd's yaw value. if (_needAutoRecenter || !_wasUserPresent) { XDevicePlugin.setHMDRotation(Quaternion.AngleAxis(0, Vector3.up)); } else { //XDevicePlugin.setHMDRotation(Quaternion.AngleAxis(curYaw,Vector3.up)); Quaternion rotationVR = VRContext.currentDevice.GetRotation(); Vector3 eulerVR = rotationVR.eulerAngles; eulerVR.y = curYaw; XDevicePlugin.setHMDRotation(Quaternion.Euler(eulerVR)); } }