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.
		
		
		
		
		
			
		
			
	
	
		
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Autohand.Demo{
							 | 
						||
| 
								 | 
							
								    public class WristLookEvent : MonoBehaviour{
							 | 
						||
| 
								 | 
							
								        public Hand hand;
							 | 
						||
| 
								 | 
							
								        public Camera head;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        [Tooltip("The minimum head->wrist distance required to activate")]
							 | 
						||
| 
								 | 
							
								        public float maxDistance = 0.75f;
							 | 
						||
| 
								 | 
							
								        [Tooltip("The angle precisness required to activate; 0 is any angle, 1 is exactly pointed at the face")]
							 | 
						||
| 
								 | 
							
								        [Range(0, 1)]
							 | 
						||
| 
								 | 
							
								        public float anglePreciseness = 0.75f;
							 | 
						||
| 
								 | 
							
								        public bool disableWhileHolding = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        [Header("Events")]
							 | 
						||
| 
								 | 
							
								        public UnityHandEvent OnShow;
							 | 
						||
| 
								 | 
							
								        public UnityHandEvent OnHide;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        bool showing = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        void Update(){
							 | 
						||
| 
								 | 
							
								            if (hand == null || head == null)
							 | 
						||
| 
								 | 
							
								                return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            var handPos = hand.transform.position;
							 | 
						||
| 
								 | 
							
								            var headPos = head.transform.position;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            float lookness = Vector3.Dot((headPos - handPos).normalized, -hand.palmTransform.forward);
							 | 
						||
| 
								 | 
							
								            float distance = Vector3.Distance(headPos, hand.palmTransform.position);
							 | 
						||
| 
								 | 
							
								            bool found = lookness >= anglePreciseness && distance < maxDistance && hand.holdingObj == null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (!showing && found){
							 | 
						||
| 
								 | 
							
								                OnShow?.Invoke(hand);
							 | 
						||
| 
								 | 
							
								                showing = true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else if(showing && !found){
							 | 
						||
| 
								 | 
							
								                OnHide?.Invoke(hand);
							 | 
						||
| 
								 | 
							
								                showing = false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |