コード例 #1
0
ファイル: GoogleVRModule.cs プロジェクト: dmilkovic/NKS_v2
        private void UpdateDevicePose()
        {
            IVRModuleDeviceState   prevState;
            IVRModuleDeviceStateRW currState;

            EnsureValidDeviceState(HEAD_INDEX, out prevState, out currState);
            if (currState.isConnected)
            {
                currState.position    = InputTracking.GetLocalPosition(XRNode.Head);
                currState.rotation    = InputTracking.GetLocalRotation(XRNode.Head);
                currState.isPoseValid = currState.pose != RigidPose.identity;
            }

            EnsureValidDeviceState(RIGHT_HAND_INDEX, out prevState, out currState);
            if (currState.isConnected)
            {
                currState.position    = m_rightArm.ControllerPositionFromHead;
                currState.rotation    = m_rightArm.ControllerRotationFromHead;
                currState.isPoseValid = m_rightDevice.Orientation != Quaternion.identity;
            }

            EnsureValidDeviceState(LEFT_HAND_INDEX, out prevState, out currState);
            if (currState.isConnected)
            {
                currState.position    = m_leftArm.ControllerPositionFromHead;
                currState.rotation    = m_leftArm.ControllerRotationFromHead;
                currState.isPoseValid = m_leftDevice.Orientation != Quaternion.identity;
            }
        }
コード例 #2
0
ファイル: GoogleVRModule.cs プロジェクト: dmilkovic/NKS_v2
        private void UpdateDevicePose()
        {
            IVRModuleDeviceState   prevState;
            IVRModuleDeviceStateRW currState;

            EnsureValidDeviceState(HEAD_INDEX, out prevState, out currState);
            if (currState.isConnected)
            {
                currState.position    = InputTracking.GetLocalPosition(XRNode.Head);
                currState.rotation    = InputTracking.GetLocalRotation(XRNode.Head);
                currState.isPoseValid = currState.pose != RigidPose.identity;
            }

            EnsureValidDeviceState(CONTROLLER_INDEX, out prevState, out currState);
            if (currState.isConnected)
            {
                currState.position    = m_gvrArmModel.ControllerPositionFromHead;
                currState.rotation    = m_gvrArmModel.ControllerRotationFromHead;
                currState.isPoseValid = GvrControllerInput.Orientation != Quaternion.identity;
            }
        }
コード例 #3
0
        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();
                }
            }
        }