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.
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);
}
}