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; }
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 }
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); }
// -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); }