I am trying to make a script that controls my animations based on the characters velocity in a direction compared to the local forward to that character. I am converting from a system that changes the animation based on button presses for two reasons:
- When I convert to multiplayer there will be less data to synchronise if clients can determine an animation based only on an objects facing direction and velocity.
- By getting the direction and velocity and sending them to mecanim I can smoothly blend between my animations, as I have a blend tree set up that makes the animations nice for situations like: character is moving forward and left, blend the walk forward and walk left animation.
For context this is a 3D FPS game
anyways this is how I am trying to do it, and forward/back velocity works perfectly, but I am getting -1 for my direction no matter what.
(Directions set up to blend : 0 is forward, -1 is left, 1 is right)
I am pretty sure it is a problem with my math in the part where I calculate direction, any tips?
Edit: Possible problem I found, the character is walking over uneven terrain so there is a y component to the velocity sometimes. — I figured out how to get rid of the y component so direction now only has a x and z component.
Calculate forward velocity:
forwardVelocity = transform.InverseTransformDirection (GetComponent<CharacterController> ().velocity).z;
Calculate direction:
direction = transform.InverseTransformDirection (GetComponent<CharacterController> ().velocity);
animDirection = Mathf.Sin (Vector3.Angle (Vector3.forward, direction2d) * Mathf.Deg2Rad);