Exemple #1
0
 public void FindRecenterTransform()
 {
     Vector3    position = Vector3.zero;
     Quaternion rotation = Quaternion.identity;
     bool       success  = GvrHeadset.TryGetRecenterTransform(ref position, ref rotation);
     //Debug.Log("Recenter transform success " + success + "; value " + position + "; " + rotation);
 }
        public override void UpdateDeviceState(IVRModuleDeviceState[] prevState, IVRModuleDeviceStateRW[] currState)
        {
            if (m_gvrCtrlInputInstance == null)
            {
                m_gvrCtrlInputInstance = Object.FindObjectOfType <GvrControllerInput>();

                if (m_gvrCtrlInputInstance == null)
                {
                    m_gvrCtrlInputInstance = VRModule.Instance.gameObject.AddComponent <GvrControllerInput>();
                }
            }

            if (GvrControllerInput.State == GvrConnectionState.Error)
            {
                Debug.LogError(GvrControllerInput.ErrorDetails);
                return;
            }

            if (m_gvrArmModelInstance == null)
            {
                m_gvrArmModelInstance = VRModule.Instance.GetComponent <GvrArmModel>();

                if (m_gvrArmModelInstance == null)
                {
                    m_gvrArmModelInstance = VRModule.Instance.gameObject.AddComponent <GvrArmModel>();
                }
            }

            if (m_gvrHeadSetInstance == null)
            {
                m_gvrHeadSetInstance = Object.FindObjectOfType <GvrHeadset>();

                if (m_gvrHeadSetInstance == null)
                {
                    m_gvrHeadSetInstance = VRModule.Instance.gameObject.AddComponent <GvrHeadset>();
                }
            }

            var headPrevState = prevState[VRModule.HMD_DEVICE_INDEX];
            var headCurrState = currState[VRModule.HMD_DEVICE_INDEX];

            headCurrState.isConnected = XRDevice.isPresent;

            if (headCurrState.isConnected)
            {
                if (!headPrevState.isConnected)
                {
                    headCurrState.deviceClass  = VRModuleDeviceClass.HMD;
                    headCurrState.serialNumber = XRDevice.model + " HMD";
                    headCurrState.modelNumber  = XRDevice.model + " HMD";

                    headCurrState.deviceModel     = VRModuleDeviceModel.DaydreamHMD;
                    headCurrState.renderModelName = string.Empty;
                }

                headCurrState.position    = InputTracking.GetLocalPosition(XRNode.Head);
                headCurrState.rotation    = InputTracking.GetLocalRotation(XRNode.Head);
                headCurrState.isPoseValid = headCurrState.pose != RigidPose.identity;

                headCurrState.pose = headCurrState.pose;
            }
            else
            {
                if (headPrevState.isConnected)
                {
                    headCurrState.Reset();
                }
            }

            var ctrlPrevState = prevState[CONTROLLER_DEVICE_INDEX];
            var ctrlCurrState = currState[CONTROLLER_DEVICE_INDEX];

            ctrlCurrState.isConnected = GvrControllerInput.State == GvrConnectionState.Connected;

            if (ctrlCurrState.isConnected)
            {
                if (!ctrlPrevState.isConnected)
                {
                    ctrlCurrState.deviceClass  = VRModuleDeviceClass.Controller;
                    ctrlCurrState.serialNumber = XRDevice.model + " Controller";
                    ctrlCurrState.modelNumber  = XRDevice.model + " Controller";

                    ctrlCurrState.deviceModel     = VRModuleDeviceModel.DaydreamController;
                    ctrlCurrState.renderModelName = string.Empty;
                }

                ctrlCurrState.pose            = new RigidPose(m_gvrArmModelInstance.ControllerPositionFromHead, m_gvrArmModelInstance.ControllerRotationFromHead);
                ctrlCurrState.isPoseValid     = GvrControllerInput.Orientation != Quaternion.identity;
                ctrlCurrState.velocity        = GvrControllerInput.Accel;
                ctrlCurrState.angularVelocity = GvrControllerInput.Gyro;

                ctrlCurrState.SetButtonPress(VRModuleRawButton.Touchpad, GvrControllerInput.ClickButton);
                ctrlCurrState.SetButtonPress(VRModuleRawButton.ApplicationMenu, GvrControllerInput.AppButton);
                ctrlCurrState.SetButtonPress(VRModuleRawButton.System, GvrControllerInput.HomeButtonState);

                ctrlCurrState.SetButtonTouch(VRModuleRawButton.Touchpad, GvrControllerInput.IsTouching);

                if (GvrControllerInput.IsTouching)
                {
                    var touchPadPosCentered = GvrControllerInput.TouchPosCentered;
                    ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadX, touchPadPosCentered.x);
                    ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadY, touchPadPosCentered.y);
                }
                else
                {
                    ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadX, 0f);
                    ctrlCurrState.SetAxisValue(VRModuleRawAxis.TouchpadY, 0f);
                }

                if (VIUSettings.daydreamSyncPadPressToTrigger)
                {
                    ctrlCurrState.SetButtonPress(VRModuleRawButton.Trigger, GvrControllerInput.ClickButton);
                    ctrlCurrState.SetButtonTouch(VRModuleRawButton.Trigger, GvrControllerInput.IsTouching);
                    ctrlCurrState.SetAxisValue(VRModuleRawAxis.Trigger, GvrControllerInput.ClickButton ? 1f : 0f);
                }
            }
            else
            {
                if (ctrlPrevState.isConnected)
                {
                    ctrlCurrState.Reset();
                }
            }
        }