- Home /
rotate smooth toward vector defined by controls
I am making a 3rd person shooter game. I cannot get the right effect for rotating the character model according to parent's direction of travel.
The system I have is a (standard assets) first person controller. As a child is the character model, which will rotate locally according to control inputs.
What I have now is the below but it is very jerky when turning and if you are strafing 90deg left then decide to go right, the model's direction does not change
var directionVector = new Vector3(Input.GetAxis("Horizontal"),
0, Input.GetAxis("Vertical");
model.transform.forward = directionVector;
I have also tried using the code from the angrybots PlayerAnimation script but it seems to be designed for top down games and causes crazy spinning.
Answer by aldonaletto · Feb 19, 2013 at 06:53 PM
Maybe another way to determine the direction could be more suitable for your case - like this (attach it to the model):
private var lastPos: Vector3;
function Start(){
lastPos = transform.position; // initialize lastPos
}
function Update(){
// calculate direction moved since last frame:
var dir = transform.position - lastPos;
dir.y = 0; // only the horizontal direction matters
if (dir.magnitude > 0.05){ // if moved at least 5 cm (2 inches)...
lastPos = transform.position; // update last position...
transform.forward = dir.normalized; // and set its direction
}
}
If the rotation is too jerky, you can increase the min distance from 0.05 to 0.10, for instance, or smooth it out with a Lerp filter like this:
...
transform.forward = Vector3.Lerp(transform.forward, dir.normalized, 5 * Time.deltaTime);
}
}
Your answer
Follow this Question
Related Questions
How should I rotate a 2D unit vector by X degrees? 1 Answer
Clamp Vector direction to one axis 1 Answer
Rotate but keep direction 1 Answer