- Home /
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
Answer by cncguy · Aug 02, 2010 at 03:35 AM
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")){
What did you change as a result? Also PingPong I would have thought looks a bit unnatural at its maximum points where it will cause the movment to suddenly change direction.
Your answer
Follow this Question
Related Questions
FPS Weapon Animation Mixing 1 Answer
Help in Script (Java Script) 0 Answers
Animation play on input, else play idle animation. 2 Answers
Walking animation problem. 0 Answers
Animation Not Playing 1 Answer