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.
		
		
		
		
		
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
using UnityEngine;
 | 
						|
using UnityEngine.Events;
 | 
						|
 | 
						|
namespace Autohand{
 | 
						|
    [RequireComponent(typeof(ConfigurableJoint))]
 | 
						|
    public class PhysicsGadgetJoystick : MonoBehaviour{
 | 
						|
        ConfigurableJoint joint;
 | 
						|
        public bool invertX;
 | 
						|
        public bool invertY;
 | 
						|
        [Tooltip("For objects slightly off center. " +
 | 
						|
            "\nThe minimum abs value required to return a value nonzero value\n " +
 | 
						|
            "- if playRange is 0.1, you have to move the gadget 10% to get a result")]
 | 
						|
        public float playRange = 0.05f; 
 | 
						|
        Vector2 xRange, zRange;
 | 
						|
        Vector2 value;
 | 
						|
        Vector3 jointRotation;
 | 
						|
        Rigidbody body;
 | 
						|
 | 
						|
        void Start(){
 | 
						|
            joint = GetComponent<ConfigurableJoint>();  
 | 
						|
            body = GetComponent<Rigidbody>();
 | 
						|
        }
 | 
						|
 | 
						|
        public void FixedUpdate(){
 | 
						|
            xRange = new Vector2(joint.lowAngularXLimit.limit, joint.highAngularXLimit.limit);
 | 
						|
            zRange = new Vector2(-joint.angularZLimit.limit, joint.angularZLimit.limit);
 | 
						|
            jointRotation = joint.Angles();
 | 
						|
            value = new Vector2(jointRotation.z/(zRange.x - zRange.y), jointRotation.x/(xRange.x - xRange.y))*2;
 | 
						|
        }
 | 
						|
 | 
						|
        public Vector2 GetValue() {
 | 
						|
            if (Mathf.Abs(value.x) < playRange)
 | 
						|
                value.x = 0;
 | 
						|
            if (Mathf.Abs(value.y) < playRange)
 | 
						|
                value.y = 0;
 | 
						|
            
 | 
						|
            value.x = invertX ? -value.x : value.x;
 | 
						|
            value.y = invertY ? -value.y : value.y;
 | 
						|
            return new Vector2(Mathf.Clamp(value.x, -1, 1), Mathf.Clamp(value.y, -1, 1));
 | 
						|
        }
 | 
						|
        
 | 
						|
    }
 | 
						|
}
 |