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; }
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; }
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); } }
//当前按钮还未实现。 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); }
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; }
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; }
protected abstract void FillMetadata(HandAnchor anchor, ref XRNodeState xRNode);
private void TestInputUsages() { leftHand = InputDevices.leftHandAnchor; rightHand = InputDevices.rightHandAnchor; }
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; }