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.
34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
6 months ago
|
using UnityEngine;
|
||
|
using UnityEngine.Events;
|
||
|
|
||
|
namespace Autohand{
|
||
|
[RequireComponent(typeof(HingeJoint))]
|
||
|
public class PhysicsGadgetHingeAngleReader : MonoBehaviour{
|
||
|
public bool invertValue = false;
|
||
|
[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;
|
||
|
HingeJoint joint;
|
||
|
protected float value = 0;
|
||
|
Quaternion startRot;
|
||
|
Quaternion deltaParentRotation;
|
||
|
|
||
|
protected virtual void Start(){
|
||
|
joint = GetComponent<HingeJoint>();
|
||
|
startRot = transform.localRotation;
|
||
|
}
|
||
|
|
||
|
/// <summary>Returns a -1 to 1 value representing the hinges angle from min-max</summary>
|
||
|
public float GetValue() {
|
||
|
value = joint.angle/(joint.limits.max - joint.limits.min)*2;
|
||
|
value = invertValue ? -value : value;
|
||
|
if (Mathf.Abs(value) < playRange)
|
||
|
value = 0;
|
||
|
return Mathf.Clamp(value, -1, 1);
|
||
|
}
|
||
|
|
||
|
public HingeJoint GetJoint() => joint;
|
||
|
}
|
||
|
}
|