コード例 #1
0
    public bool IsHandVisible(HandednessEnum handedness, float minConfidence = 0.15f)
    {
        if (!IsHandVisible())
        {
            return(false);
        }



        for (int i = 0; i < trackedHands.Count; i++)
        {
            if (trackedHands[i].Handedness == handedness && trackedHands[i].HandednessConfidence > minConfidence)
            {
                return(true);
            }
        }

        return(false);
    }
コード例 #2
0
    public static HandednessEnum GetHandedness(Vector3 forward, Vector3 handPos, Vector3 up)
    {
        // Get handedness based on position relative to camera
        Vector3 cross     = Vector3.Cross(forward, handPos);
        float   direction = Vector3.Dot(cross, up);

        HandednessEnum newHandedness = HandednessEnum.Neither;

        if (direction >= 0f)
        {
            // Favor right-handedness slightly
            newHandedness = HandednessEnum.Right;
        }
        else
        {
            newHandedness = HandednessEnum.Left;
        }

        return(newHandedness);
    }
コード例 #3
0
 private void TappedHandler(HandednessEnum pressedHand, float pressedTime)
 {
     // Debug.Log("diff of pressedTime: " + (pressedTime - previousPressedTime));
     if (pressedTime - previousPressedTime > intervalTime)
     {
         if (pressedHand == HandednessEnum.Left)
         {
             TappedEvent(TapActionEnum.LeftTap);
             Debug.Log("LeftTappedEvent.");
         }
         else if (pressedHand == HandednessEnum.Right)
         {
             TappedEvent(TapActionEnum.RightTap);
             Debug.Log("RightTappedEvent.");
         }
     }
     else
     {
         if (previousPressedHand == HandednessEnum.Left && pressedHand == HandednessEnum.Left)
         {
             TappedEvent(TapActionEnum.LeftLeftTap);
             Debug.Log("LeftLeftTappedEvent.");
         }
         else if (previousPressedHand == HandednessEnum.Right && pressedHand == HandednessEnum.Right)
         {
             TappedEvent(TapActionEnum.RightRightTap);
             Debug.Log("RightRightTappedEvent.");
         }
         else if (previousPressedHand == HandednessEnum.Left && pressedHand == HandednessEnum.Right)
         {
             TappedEvent(TapActionEnum.LeftRightTap);
             Debug.Log("LeftRightTappedEvent.");
         }
         else if (previousPressedHand == HandednessEnum.Right && pressedHand == HandednessEnum.Left)
         {
             TappedEvent(TapActionEnum.RightLeftTap);
             Debug.Log("RightLeftTappedEvent.");
         }
     }
 }
コード例 #4
0
    /// <summary>
    /// Gets the handedness of a position with respect to a camera position
    /// </summary>
    /// <param name="forward"></param>
    /// <param name="handPos"></param>
    /// <param name="up"></param>
    /// <param name="confidence"></param>
    /// <param name="currentHandedness"></param>
    /// <returns></returns>
    public static HandednessEnum GetHandedness(Vector3 forward, Vector3 handPos, Vector3 up, ref float confidence, HandednessEnum currentHandedness = HandednessEnum.Neither)
    {
        // Get handedness based on position relative to camera
        Vector3        cross         = Vector3.Cross(forward, handPos);
        float          direction     = Vector3.Dot(cross, up);
        float          newConfidence = Mathf.Abs(direction);
        HandednessEnum newHandedness = HandednessEnum.Neither;

        if (direction >= 0f)
        {
            // Favor right-handedness slightly
            newHandedness = HandednessEnum.Right;
        }
        else
        {
            newHandedness = HandednessEnum.Left;
        }

        // If we've already got a handedness, and the new handedness is different
        // reset the confidence
        if (currentHandedness != HandednessEnum.Neither && currentHandedness != newHandedness)
        {
            confidence = newConfidence;
        }
        else
        {
            // Otherwise, allow the confidence to remain at the max observed so far
            confidence = Mathf.Max(confidence, newConfidence);
        }

        return(newHandedness);
    }