FPS game walk animation script help

hi i this script :

var smooth : float;
var height : float;
private var pos = Vector3.zero;

function Update () {

    if(Input.GetButton("w")||Input.GetButton("a")||Input.GetButton("s")||Input.GetButton("d")){
        Walk();
    }

    if(!Input.GetButton("w")&&!Input.GetButton("a")&&!Input.GetButton("s")&&!Input.GetButton("d")){
        transform.localPosition = Vector3.Lerp(transform.localPosition,pos,Time.deltaTime*.2);
        Idle();
    }
}

function Walk () {
    transform.localPosition.y = Mathf.PingPong(Time.time*smooth,height);

    transform.localPosition.x = Mathf.PingPong(Time.time*(smooth/2),height);
}

function Idle () {
    transform.localPosition.y = Mathf.PingPong(Time.time*.002,.002);
}

what it does it makes it look like the player is walking kind of..... the problem is that when you start moving or when you stop the movement looks kind of jittery.

oh and the position of the gun is at zero on the x y and z.

any thoughts on the problem would be nice....

thanks

On the face of it you are probably getting a mismatch on these lines:

transform.localPosition = Vector3.Lerp(transform.localPosition,pos,Time.deltaTime*.2);
Idle();

you are smoothly moving toward local zero (on the first line with the Lerp) and then jumping in Y (in Idle) to whatever the PingPong Spits out.

I assume you are trying to smoothly move to zero when you stop walking and THEN start bobbing up and down. But you are trying to do both simultaneously.

[Addition]

You could try bobbing a 'target' and then have the localPosition of your transform 'Lerp' towards that.

eg.

var bobFollowSpeed : Vector3;
var target : Vector3; 

function Update()
{
    functionThatMakesTargetBobAround();

    transform.localPosition = Vector3.Lerp(transform.localPosition, target, bobFollowSpeed*Time.deltaTime);
}

The functionThatMakesTargetBobAround() is basically what you have for the localPosition at the moment although you'll have to repackage it somewhat.

[Also] just to note, the following in the above is equivalent to 'else'

if(!Input.GetButton("w")&&!Input.GetButton("a")&&!Input.GetButton("s")&&!Input.GetButton("d")){