So I want to play my movement animations for my AI based on that AI’s speed and direction. This works when they are going at slower speeds but when I increase to a faster movement speed the animations seem jittery or just don’t play(they are stuck in one position of the animation).
The idea is to have a mechanim speed and direction variable that will be used in a blend tree to play the movement animation. So I calculate the speed (this one seems to be fine) and direction (this one does not).
I have two ways of calculating direction: one based on rotation and the other on actual direction (I found this one on the help room):
void Update () {
//is moving left or right?
Vector3 dir = this.transform.position;
dir.Normalize ();
// Debug.Log (dir.x);
animator.SetFloat ("direction", dir.x);
// animator.SetFloat ("direction", transform.rotation.eulerAngles.y - lastRotation);
// lastRotation = transform.rotation.eulerAngles.y;
Then the following is the one I am pretty sure is working fine. Its the speed calculation:
//for speed calculation
speed = Vector3.Distance(lastPos, this.transform.position) / Time.deltaTime;
lastPos = this.transform.position;
switch(lastState) {
case "calm":
animSpeed = speed / calmSpeed;
break;
case "suspicious":
animSpeed = speed / suspiciousSpeed;
break;
case "hostile":
animSpeed = speed / hostileSpeed;
break;
}
if (animSpeed > 1000 || animSpeed < -1000 || animSpeed == 0 ||
animSpeed == Mathf.Infinity || animSpeed == Mathf.NegativeInfinity) {
animSpeed = 0;
animator.SetFloat ("speed", animSpeed);
}
else {
animator.SetFloat ("speed", animSpeed);
}
Then the mechanim is setup like the following:
Any ideas as to why the animations might be pausing or not running? It’s like they are stuck halfway between starting to run and its idle state (when speed and direction are zero).
Any help and direction on this would be fantastic.