Ejemplo n.º 1
0
 public void Init(GestureSO gesture1, GestureSO gesture2, float timeBetween, float threshold, bool wait)
 {
     fistGesture               = gesture1;
     palmGesture               = gesture2;
     timeBetweenRecognition    = timeBetween;
     recognitionThreshold      = threshold;
     waitForHighConfidenceData = wait;
     lastRecognition           = timeBetweenRecognition;
     prevGesture               = null;
     curGesture = null;
 }
Ejemplo n.º 2
0
    private void CreateGestureAsset(List <Vector3> data = null)
    {
#if UNITY_EDITOR
        GestureSO asset = ScriptableObject.CreateInstance <GestureSO>();

        asset.gestureName     = gestureName;
        asset.fingerPositions = data;
        asset.hand            = handToSave;

        AssetDatabase.CreateAsset(asset, "Assets/Resources/" + gestureName + ".asset");
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
        EditorUtility.SetDirty(asset);
        AssetDatabase.SaveAssets();

        EditorUtility.FocusProjectWindow();

        Selection.activeObject = asset;
#endif
    }
Ejemplo n.º 3
0
    bool CheckRecognition()
    {
        if (fingerBones.Count == 0)
        {
            LoadSkeleton();
        }

        if (fingerBones.Count == 0)
        {
            return(false);
        }

        if (!hand.IsTracked)
        {
            return(false);
        }

        if (!hand.IsDataHighConfidence && waitForHighConfidenceData)
        {
            return(false);
        }

        float     sumDistance = 0;
        bool      isDiscarded = false;
        GestureSO gesture     = recognitionState < 0 ? gestureToRecognize1 : gestureToRecognize2;

        for (int i = 0; i < fingerBones.Count; i++)
        {
            Vector3 currentData = skeleton.transform.InverseTransformPoint(fingerBones[i].Transform.position);
            float   distance    = Vector3.Distance(gesture.fingerPositions[i], currentData);
            if (distance > recognitionThreshold)
            {
                return(false);
            }

            sumDistance = distance;
        }

        Debug.Log("Gesture recognized with sum distance of: " + sumDistance);
        return(true);
    }
Ejemplo n.º 4
0
    // -1: no gesture, 1: throw, 2: grab
    public int Triggered(OVRSkeleton skeleton, List <OVRBone> fingerBones, OVRHand hand)
    {
        if (fistGesture == null || palmGesture == null)
        {
            return(-1);
        }
        lastRecognition += Time.deltaTime;
        if (lastRecognition < timeBetweenRecognition)
        {
            return(-1);
        }

        curGesture = CheckRecognition(skeleton, fingerBones, hand);
        if (curGesture != null)
        {
            if (curGesture.name == palmGesture.name)
            {
                if (prevGesture == fistGesture && lastRecognition < 5 * timeBetweenRecognition)
                {
                    prevGesture     = curGesture;
                    lastRecognition = 0f;
                    return(1);
                }
            }
            else
            {
                if (prevGesture == palmGesture && lastRecognition < 5 * timeBetweenRecognition)
                {
                    prevGesture     = curGesture;
                    lastRecognition = 0f;
                    return(2);
                }
            }
            prevGesture     = curGesture;
            lastRecognition = 0f;
        }
        return(-1);
    }