Пример #1
0
        internal override void UpdateState(TrackingAnchor xRNodeUsage)
        {
            HandAnchor handUsage = xRNodeUsage as HandAnchor;

            mTouched = handUsage.primary2DAxisTouch;

            mVec2Value = Vector2.zero;
            mKeyForce  = 0f;
            if (mTouched)
            {
                mVec2Value = handUsage.primary2DAxis;
                mKeyForce  = 0.1f;
            }

            bool lastPressed = mPressed;

            mPressed = handUsage.primary2DAxisPressed;
            if (mPressed)
            {
                mKeyForce = 1f;
            }

            mBoolDown = !lastPressed && mPressed;
            mBoolUp   = lastPressed && !mPressed;
        }
Пример #2
0
        internal override void UpdateState(TrackingAnchor xRNodeUsage)
        {
            HandAnchor handUsage = xRNodeUsage as HandAnchor;

            mTouched  = handUsage.primary2DAxisTouch;
            mKeyForce = 0f;
            bool lastPressed = mPressed;

            mPressed = false;

            if (mTouched)
            {
                Vector2 axis = handUsage.primary2DAxis;

                mTouched = false;
                m_Degree = 0f;
                bool bInCenter = inCenter(axis);
                if (keyCode == InputKey.Middle)
                {
                    mTouched = bInCenter;
                }
                else if (!bInCenter && keyCode == InputKey.North)
                {
                    m_Degree = angleToNorth(axis);
                    mTouched = m_Degree < degree45;
                }
                else if (!bInCenter && keyCode == InputKey.South)
                {
                    m_Degree = angleToSouth(axis);
                    mTouched = m_Degree < degree45;
                }
                else if (!bInCenter && keyCode == InputKey.West)
                {
                    m_Degree = angleToWest(axis);
                    mTouched = m_Degree < degree45;
                }
                else if (!bInCenter && keyCode == InputKey.East)
                {
                    m_Degree = angleToEast(axis);
                    mTouched = m_Degree < degree45;
                }

                if (mTouched)
                {
                    if (keyCode == InputKey.Middle || InputDevices.isTouchPad)
                    {
                        mPressed = handUsage.primary2DAxisPressed;
                    }
                    else
                    {
                        mPressed = axis.sqrMagnitude >= touchPressSqr;
                    }
                }
            }
            mBoolDown = !lastPressed && mPressed;
            mBoolUp   = lastPressed && !mPressed;
        }
Пример #3
0
        internal override void UpdateState(TrackingAnchor input)
        {
            HandAnchor hand = input as HandAnchor;

            poseChanged = hand.handPoseChanged;
            if (poseChanged)
            {
                Array.Copy(hand.fingerCurls, handPose_Value, handPose_Value.Length);
            }
        }
Пример #4
0
        //当前按钮还未实现。
        internal override void UpdateState(TrackingAnchor xRNodeUsage)
        {
            HandAnchor handUsage = xRNodeUsage as HandAnchor;

            bool lastPressed = mPressed;

            mPressed  = handUsage.systemPressed;
            mBoolDown = !lastPressed && mPressed;
            mBoolUp   = lastPressed && !mPressed;

            mKeyForce = handUsage.systemTouchValue;
            mTouched  = isTouched(mKeyForce);
        }
Пример #5
0
        internal override void UpdateState(TrackingAnchor xRNodeUsage)
        {
            HandAnchor handUsage = xRNodeUsage as HandAnchor;

            bool  lastPressed = mPressed;
            float lastForce   = mKeyForce;

            mKeyForce = handUsage.gripTouchValue;
            mTouched  = isTouched(mKeyForce);

            mPressed  = OptimizPressByKeyForce(lastForce, mKeyForce, 0.01f, 0.2f, 0.6f);
            mBoolDown = !lastPressed && mPressed;
            mBoolUp   = lastPressed && !mPressed;
        }
Пример #6
0
        internal override void UpdateState(TrackingAnchor xRNodeUsage)
        {
            bool  lastPressed = mPressed;
            float lastForce   = mKeyForce;

            HandAnchor handUsage = xRNodeUsage as HandAnchor;

            mKeyForce = handUsage.triggerTouchValue;
            mTouched  = isTouched(mKeyForce);

            //这里不使用UnityXR的按钮状态,因为会有感官上的延迟
            //device.TryGetFeatureValue(CommonUsages.triggerButton, out mPressed);
            mPressed  = OptimizPressByKeyForce(lastForce, mKeyForce, 0.01f, 0.2f, 0.6f);
            mBoolDown = !lastPressed && mPressed;
            mBoolUp   = lastPressed && !mPressed;
        }
Пример #7
0
 protected abstract void FillMetadata(HandAnchor anchor, ref XRNodeState xRNode);
Пример #8
0
 private void TestInputUsages()
 {
     leftHand  = InputDevices.leftHandAnchor;
     rightHand = InputDevices.rightHandAnchor;
 }
Пример #9
0
        protected override void FillMetadata(HandAnchor anchor, ref XRNodeState xRNode)
        {
            var   device = U3DInputDevices.GetDeviceAtXRNode(xRNode.nodeType);
            float thumb = 0f, index = 0f, middle = 0f;

            //psotion && rotation
            xRNode.TryGetPosition(out anchor.position);
            xRNode.TryGetRotation(out anchor.rotation);

            //grip
            device.TryGetFeatureValue(CommonUsages.gripButton, out anchor.gripPressed);
            device.TryGetFeatureValue(CommonUsages.grip, out anchor.gripTouchValue);
            anchor.gripTouchValue = anchor.gripTouchValue > 0.06f ? anchor.gripTouchValue : 0f;
            middle = anchor.gripTouchValue;

            //trigger
            device.TryGetFeatureValue(CommonUsages.triggerButton, out anchor.triggerPressed);
            device.TryGetFeatureValue(CommonUsages.trigger, out anchor.triggerTouchValue);
            anchor.triggerTouchValue = anchor.triggerTouchValue > 0.06f ? anchor.triggerTouchValue : 0f;
            index = anchor.triggerTouchValue;

            //system
            device.TryGetFeatureValue(CommonUsages.menuButton, out anchor.systemPressed);
            anchor.systemTouchValue = 0f;
            if (anchor.systemPressed)
            {
                anchor.systemTouchValue = 1f;
            }
            thumb = Mathf.Max(thumb, anchor.systemTouchValue);

            //primary
            device.TryGetFeatureValue(CommonUsages.primaryButton, out anchor.primaryPressed);
            bool primaryTouch = false;

            device.TryGetFeatureValue(CommonUsages.primaryTouch, out primaryTouch);
            anchor.primaryTouchValue = (anchor.primaryPressed || primaryTouch) ? 1f : 0f;
            thumb = Mathf.Max(thumb, anchor.primaryTouchValue);

            //secondary
            device.TryGetFeatureValue(CommonUsages.secondaryButton, out anchor.secondaryPressed);
            bool secondaryTouch = false;

            device.TryGetFeatureValue(CommonUsages.secondaryTouch, out secondaryTouch);
            anchor.secondaryTouchValue = (anchor.secondaryPressed || secondaryTouch) ? 1f : 0f;
            thumb = Mathf.Max(thumb, anchor.secondaryTouchValue);

            //primary2DAxis
            device.TryGetFeatureValue(CommonUsages.primary2DAxisTouch, out anchor.primary2DAxisTouch);
            device.TryGetFeatureValue(CommonUsages.primary2DAxisClick, out anchor.primary2DAxisPressed);
            device.TryGetFeatureValue(CommonUsages.primary2DAxis, out anchor.primary2DAxis);
            thumb = Mathf.Max(thumb, (anchor.primary2DAxisPressed || anchor.primary2DAxisTouch) ? 1f : 0f);
            thumb = Mathf.Max(thumb, anchor.primary2DAxis.sqrMagnitude > 0.1f ? 1f : 0f);

            //secondary2DAxis
            device.TryGetFeatureValue(CommonUsages.secondary2DAxis, out anchor.secondary2DAxis);
            thumb = Mathf.Max(thumb, anchor.secondary2DAxis.sqrMagnitude > 0.1f ? 1f : 0f);
            thumb = thumb > 0.06f ? thumb: 0;

            //fingers
            anchor.fingerCurls[0]  = thumb;
            anchor.fingerCurls[1]  = index;
            anchor.fingerCurls[2]  = middle;
            anchor.fingerCurls[3]  = middle;
            anchor.fingerCurls[4]  = middle;
            anchor.handPoseChanged = true;
        }