- Home /
Keyboard controlled knee. (QWOP mechanic)
Hiya guys. I am tring to create a human body with fully controllable joints. In the end it probably would look something like this: QWOP (I am also working in 2d)
I am using configurable joint with these settings:
XMotion : Locked
YMotion : Locked
ZMotion : Locked
Angular XMotion : Limited
Angular YMotion : Locked
Angular ZMotion : Locked Low angular XLimit : Limit -70 High angular XLimit : Limit 70
Rotation Drive Mode : X & YZ
Angular XDrive: Mode : Position
Position Spring : 1000
Position Damper : 200
Maximum Force : 10
The script to control the movement is this:
void Update()
{
targetAngle += Input.GetAxis("Vertical") * Time.deltaTime * rotateSpeed;
Quaternion targetRotation = Quaternion.AngleAxis( targetAngle, Vector3.right );
thisConfJoint.targetRotation = targetRotation;
}
So THE PROBLEM is basically this - it doesn`t work the way I want to. The value of "targetAngle" can go higher or lower than the angle the leg can bend, and that causes the legs to jump around (if I hold down long enough for targetAngle go from +70 to -70 the wrong way) or a lag between movements (when targetAngle crosses the 70* line, and I have to wait for it to move back).
I am pretty new both to Unity and programming, and can`t seem to find a way to limit targetAngle`s value in the boundaries, or think of alternative solution for this. This is where I come to you guys - could anyone at least hint me the right direction to look at? :)
I also tried to use transform.rotate on different limbs with character joints, but it doesn`t seem to work either :/
Answer by wolis · Jan 04, 2012 at 09:28 AM
Fixed it with this line targetAngle = Mathf.Clamp( targetAngle, -70, 70);