You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Text;
 | 
						|
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace Valve.VR.InteractionSystem.Sample
 | 
						|
{
 | 
						|
    public class JoeJeffGestures : MonoBehaviour
 | 
						|
    {
 | 
						|
        private const float openFingerAmount = 0.1f;
 | 
						|
        private const float closedFingerAmount = 0.9f;
 | 
						|
        private const float closedThumbAmount = 0.4f;
 | 
						|
 | 
						|
        private JoeJeff joeJeff;
 | 
						|
 | 
						|
        private void Awake()
 | 
						|
        {
 | 
						|
            joeJeff = this.GetComponent<JoeJeff>();
 | 
						|
        }
 | 
						|
 | 
						|
        private void Update()
 | 
						|
        {
 | 
						|
            if (Player.instance == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            Transform cam = Camera.main.transform;
 | 
						|
            bool lookingAt = (Vector3.Angle(cam.forward, transform.position - cam.position) < 90);
 | 
						|
 | 
						|
            if (lookingAt == false)
 | 
						|
                return;
 | 
						|
 | 
						|
            for (int handIndex = 0; handIndex < Player.instance.hands.Length; handIndex++)
 | 
						|
            {
 | 
						|
                if (Player.instance.hands[handIndex] != null)
 | 
						|
                {
 | 
						|
                    SteamVR_Behaviour_Skeleton skeleton = Player.instance.hands[handIndex].skeleton;
 | 
						|
                    if (skeleton != null)
 | 
						|
                    {
 | 
						|
                        //Debug.LogFormat("{0:0.00}, {1:0.00}, {2:0.00}, {3:0.00}, {4:0.00}", skeleton.thumbCurl, skeleton.indexCurl, skeleton.middleCurl, skeleton.ringCurl, skeleton.pinkyCurl);
 | 
						|
 | 
						|
                        if ((skeleton.indexCurl <= openFingerAmount && skeleton.middleCurl <= openFingerAmount) &&
 | 
						|
                            (skeleton.thumbCurl >= closedThumbAmount && skeleton.ringCurl >= closedFingerAmount && skeleton.pinkyCurl >= closedFingerAmount))
 | 
						|
                        {
 | 
						|
                            PeaceSignRecognized(true);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            PeaceSignRecognized(false);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool lastPeaceSignState = false;
 | 
						|
        private void PeaceSignRecognized(bool currentPeaceSignState)
 | 
						|
        {
 | 
						|
            if (lastPeaceSignState == false && currentPeaceSignState == true)
 | 
						|
            {
 | 
						|
                joeJeff.Jump();
 | 
						|
            }
 | 
						|
 | 
						|
            lastPeaceSignState = currentPeaceSignState;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |