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.
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'