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#

6 months ago
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));
}
}
}