I’m trying to find a way to edit the value of Target Position in the hinge Joint component in a C# script.
Edit: My main source of confusion was HingeJoint hinge = GetComponent<HingeJoint>();
on the Unity documentation regarding Component.GetComponent, which a more experienced developer explained to me should be HingeJoint hinge = gameObject.GetComponent<HingeJoint>();
, which helped me understand how that worked. But, now that I should have it setup correctly, it still does not work.
Figured it out, here’s what I had:
public class Leg_movement : MonoBehaviour
{
public GameObject foot, lowerLeg, upperLeg;
JointSpring footSpring, lowerLegSpring, upperLegSpring;
void Start()
{
HingeJoint footHinge = foot.GetComponent<HingeJoint>();
footSpring = footHinge.spring;
HingeJoint lowerLegHinge = lowerLeg.GetComponent<HingeJoint>();
lowerLegSpring = lowerLegHinge.spring;
HingeJoint upperLegHinge = upperLeg.GetComponent<HingeJoint>();
upperLegSpring = upperLegHinge.spring;
}
void Update()
{
if (Input.GetKey(Keybinds.kcLeftLeg))
{
Debug.Log("Left leg contracts");
lowerLegSpring.targetPosition = 100;
}
if (Input.GetKey(Keybinds.kcRightLeg))
{
Debug.Log("Right leg contracts");
}
}
}
And here’s what I should have had:
public class Leg_movement : MonoBehaviour
{
public GameObject foot, lowerLeg, upperLeg;
JointSpring footSpring, lowerLegSpring, upperLegSpring;
HingeJoint footHinge, lowerLegHinge, upperLegHinge;
void Start()
{
footHinge = foot.GetComponent<HingeJoint>();
footSpring = footHinge.spring;
lowerLegHinge = lowerLeg.GetComponent<HingeJoint>();
lowerLegSpring = lowerLegHinge.spring;
upperLegHinge = upperLeg.GetComponent<HingeJoint>();
upperLegSpring = upperLegHinge.spring;
}
void Update()
{
if (Input.GetKey(Keybinds.kcLeftLeg))
{
Debug.Log("Left leg contracts");
lowerLegSpring.targetPosition = 100;
lowerLegHinge.spring = lowerLegSpring;
}
if (Input.GetKey(Keybinds.kcRightLeg))
{
Debug.Log("Right leg contracts");
}
}
}
Works flawlessly now.