Exemplo n.º 1
0
 protected virtual void OnApplicationPause(bool pauseStatus)
 {
     if (m_IsPaused != pauseStatus)
     {
         m_IsPaused = pauseStatus;
         //
         XDevicePlugin.setHMDRotation(Quaternion.identity);
         if (m_IsPaused)                 // OnPause()
         {
         }
         else                   // OnResume()
         {
             AlignHmd();
         }
     }
 }
Exemplo n.º 2
0
        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));
            }
        }