//Constructors: public ManagedHandSkeleton(ManagedHand managedHand) { //refs: _mainCamera = Camera.main; //sets: _managedHand = managedHand; //establish rotation offsets: _rotationOffsets = new List <Vector3>(); _rotationOffsets.Add(Vector3.zero); _rotationOffsets.Add(new Vector3(-0.3004f, -0.9466f, 0.1174f)); _rotationOffsets.Add(new Vector3(-0.8816f, 0.3225f, 0.3447f)); //keypoints: HandCenter = new ManagedKeypoint(); WristCenter = new ManagedKeypoint(); //fingers: Thumb = new ManagedFinger(_managedHand.Hand, _thumbMCP, _thumbPIP, _thumbTip); Index = new ManagedFinger(_managedHand.Hand, _indexMCP, _indexPIP, _indexTip); Middle = new ManagedFinger(_managedHand.Hand, _middleMCP, _middlePIP, _middleTip); Ring = new ManagedFinger(_managedHand.Hand, _ringMCP, _ringTip); Pinky = new ManagedFinger(_managedHand.Hand, _pinkyMCP, _pinkyTip); }
//Event Handlers: private void HandlePointVisibilityChanged() { for (int i = 0; i < points.Length; i++) { if (points[i].Visible && _lastReliableEnd != points[i]) { _lastReliableEnd = points[i]; _endTransitionStartTime = Time.realtimeSinceStartup; _endIsTransitioning = true; } } }
private void DrawBone(string fingerName, Vector3 from, ManagedKeypoint to, Color colorA, Color colorB) { fingerName = Name(fingerName); Lines.DrawLine(fingerName, colorA, colorB, .0005f, from, to.positionFiltered); if (_managedHand.Visible && to.Visible) { Lines.SetVisibility(fingerName, true); } else { Lines.SetVisibility(fingerName, false); } }
//Constructors: public ManagedFinger(MLHand hand, params ManagedKeypoint[] points) { //sets: _hand = hand; this.points = points; _lastReliableEnd = points[0]; //hooks: foreach (var item in points) { item.OnFound += HandlePointVisibilityChanged; item.OnLost += HandlePointVisibilityChanged; } //initial events: OnVisibilityChanged?.Invoke(false); HandlePointVisibilityChanged(); }
//Loops: private void Update() { if (!HandInput.Ready) { return; } //get: switch (keyPoint) { case KeyPoint.RightHandCenter: _status = HandInput.Right.Skeleton.HandCenter; break; case KeyPoint.RightWristCenter: _status = HandInput.Right.Skeleton.WristCenter; break; case KeyPoint.RightThumbKnuckle: _status = HandInput.Right.Skeleton.Thumb.Knuckle; break; case KeyPoint.RightThumbJoint: _status = HandInput.Right.Skeleton.Thumb.Joint; break; case KeyPoint.RightThumbTip: _status = HandInput.Right.Skeleton.Thumb.Tip; break; case KeyPoint.RightIndexKnuckle: _status = HandInput.Right.Skeleton.Index.Knuckle; break; case KeyPoint.RightIndexJoint: _status = HandInput.Right.Skeleton.Index.Joint; break; case KeyPoint.RightIndexTip: _status = HandInput.Right.Skeleton.Index.Tip; break; case KeyPoint.RightMiddleKnuckle: _status = HandInput.Right.Skeleton.Middle.Knuckle; break; case KeyPoint.RightMiddleJoint: _status = HandInput.Right.Skeleton.Middle.Joint; break; case KeyPoint.RightMiddleTip: _status = HandInput.Right.Skeleton.Middle.Tip; break; case KeyPoint.RightRingKnuckle: _status = HandInput.Right.Skeleton.Ring.Knuckle; break; case KeyPoint.RightRingTip: _status = HandInput.Right.Skeleton.Ring.Tip; break; case KeyPoint.RightPinkyKnuckle: _status = HandInput.Right.Skeleton.Pinky.Knuckle; break; case KeyPoint.RightPinkyTip: _status = HandInput.Right.Skeleton.Pinky.Tip; break; case KeyPoint.LeftHandCenter: _status = HandInput.Left.Skeleton.HandCenter; break; case KeyPoint.LeftWristCenter: _status = HandInput.Left.Skeleton.WristCenter; break; case KeyPoint.LeftThumbKnuckle: _status = HandInput.Left.Skeleton.Thumb.Knuckle; break; case KeyPoint.LeftThumbJoint: _status = HandInput.Left.Skeleton.Thumb.Joint; break; case KeyPoint.LeftThumbTip: _status = HandInput.Left.Skeleton.Thumb.Tip; break; case KeyPoint.LeftIndexKnuckle: _status = HandInput.Left.Skeleton.Index.Knuckle; break; case KeyPoint.LeftIndexJoint: _status = HandInput.Left.Skeleton.Index.Joint; break; case KeyPoint.LeftIndexTip: _status = HandInput.Left.Skeleton.Index.Tip; break; case KeyPoint.LeftMiddleKnuckle: _status = HandInput.Left.Skeleton.Middle.Knuckle; break; case KeyPoint.LeftMiddleJoint: _status = HandInput.Left.Skeleton.Middle.Joint; break; case KeyPoint.LeftMiddleTip: _status = HandInput.Left.Skeleton.Middle.Tip; break; case KeyPoint.LeftRingKnuckle: _status = HandInput.Left.Skeleton.Ring.Knuckle; break; case KeyPoint.LeftRingTip: _status = HandInput.Left.Skeleton.Ring.Tip; break; case KeyPoint.LeftPinkyKnuckle: _status = HandInput.Left.Skeleton.Pinky.Knuckle; break; case KeyPoint.LeftPinkyTip: _status = HandInput.Left.Skeleton.Pinky.Tip; break; } //status: if (_status != null) { //status: filtered.enabled = _status.Visible; raw.enabled = _status.Visible; filteredBlur.enabled = _status.Visible; //location: filtered.transform.position = _status.positionFiltered; filteredBlur.transform.position = _status.positionFiltered; raw.transform.position = _status.positionRaw; //color if inside clip plane: if (_status.Visible) { if (_status.InsideClipPlane) { raw.enabled = false; filtered.enabled = false; filteredBlur.enabled = true; } else { raw.enabled = true; filtered.enabled = true; filteredBlur.enabled = false; } } } }