Всем привет! Кто работал с CharacterController помогите пожалуйста.
Есть 4 вида анимации движения: вперед, назад, влево, вправо.
Есть скрипты управления:

using UnityEngine;
using System.Collections;
public class PlatformCharacterController : MonoBehaviour {
private CharacterMotor motor;
public float walkMultiplier = 0.5f;
public bool defaultIsWalk = false;
// Use this for initialization
void Start () {
motor = GetComponent(typeof(CharacterMotor)) as CharacterMotor;
if (motor==null) Debug.Log("Motor is null!!");
}
// Update is called once per frame
void Update () {
// Get input vector from kayboard or analog stick and make it length 1 at most
Vector3 directionVector = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);
if (directionVector.magnitude > 1) directionVector = directionVector.normalized;
directionVector = directionVector.normalized * Mathf.Pow(directionVector.magnitude, 2);
// Rotate input vector into camera space so up is camera's up and right is camera's right
directionVector = Camera.main.transform.rotation * directionVector;
// Rotate input vector to be perpendicular to character's up vector
Quaternion camToCharacterSpace = Quaternion.FromToRotation(Camera.main.transform.forward*-1, transform.up);
directionVector = (camToCharacterSpace * directionVector);
// Make input vector relative to Character's own orientation
directionVector = Quaternion.Inverse(transform.rotation) * directionVector;
if (walkMultiplier != 1) {
if ((Input.GetKey("left shift") || Input.GetKey("right shift")) != defaultIsWalk) {
directionVector *= walkMultiplier;
}
}
// Apply direction
motor.desiredMovementDirection = directionVector;
}
}

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class NormalCharacterMotor : CharacterMotor {
public float maxRotationSpeed = 270;
private bool firstframe = true;
private void OnEnable () {
firstframe = true;
}
private void UpdateFacingDirection() {
// Calculate which way character should be facing
float facingWeight = desiredFacingDirection.magnitude;
Vector3 combinedFacingDirection = (
transform.rotation * desiredMovementDirection * (1-facingWeight)
+ desiredFacingDirection * facingWeight
);
combinedFacingDirection = Util.ProjectOntoPlane(combinedFacingDirection, transform.up);
combinedFacingDirection = alignCorrection * combinedFacingDirection;
if (combinedFacingDirection.sqrMagnitude > 0.01f) {
Vector3 newForward = Util.ConstantSlerp(
transform.forward,
combinedFacingDirection,
maxRotationSpeed*Time.deltaTime
);
newForward = Util.ProjectOntoPlane(newForward, transform.up);
//Debug.DrawLine(transform.position, transform.position+newForward, Color.yellow);
Quaternion q = new Quaternion();
q.SetLookRotation(newForward, transform.up);
transform.rotation = q;
}
}
private void UpdateVelocity() {
CharacterController controller = GetComponent(typeof(CharacterController)) as CharacterController;
Vector3 velocity = controller.velocity;
if (firstframe) {
velocity = Vector3.zero;
firstframe = false;
}
if (grounded) velocity = Util.ProjectOntoPlane(velocity, transform.up);
// Calculate how fast we should be moving
Vector3 movement = velocity;
//bool hasJumped = false;
jumping = false;
if (grounded) {
// Apply a force that attempts to reach our target velocity
Vector3 velocityChange = (desiredVelocity - velocity);
if (velocityChange.magnitude > maxVelocityChange) {
velocityChange = velocityChange.normalized * maxVelocityChange;
}
movement += velocityChange;
// Jump
if (canJump && Input.GetButton("Jump")) {
movement += transform.up * Mathf.Sqrt(2 * jumpHeight * gravity);
//hasJumped = true;
jumping = true;
}
}
// Apply downwards gravity
movement += transform.up * -gravity * Time.deltaTime;
if (jumping) {
movement -= transform.up * -gravity * Time.deltaTime / 2;
}
// Apply movement
CollisionFlags flags = controller.Move(movement * Time.deltaTime);
grounded = (flags & CollisionFlags.CollidedBelow) != 0;
}
// Update is called once per frame
void Update () {
UpdateFacingDirection();
UpdateVelocity();
}
}

using UnityEngine;
using System.Collections;
public abstract class CharacterMotor : MonoBehaviour {
public float maxForwardSpeed = 1.5f;
public float maxBackwardsSpeed = 1.5f;
public float maxSidewaysSpeed = 1.5f;
public float maxVelocityChange = 0.2f;
public float gravity = 10.0f;
public bool canJump = true;
public float jumpHeight = 1.0f;
public Vector3 forwardVector = Vector3.forward;
protected Quaternion alignCorrection;
private bool m_Grounded = false;
public bool grounded {
get { return m_Grounded; }
protected set { m_Grounded = value; }
}
private bool m_Jumping = false;
public bool jumping {
get { return m_Jumping; }
protected set { m_Jumping = value; }
}
private Vector3 m_desiredMovementDirection;
private Vector3 m_desiredFacingDirection;
void Start () {
alignCorrection = new Quaternion();
alignCorrection.SetLookRotation(forwardVector, Vector3.up);
alignCorrection = Quaternion.Inverse(alignCorrection);
}
public Vector3 desiredMovementDirection {
get { return m_desiredMovementDirection; }
set {
m_desiredMovementDirection = value;
if (m_desiredMovementDirection.magnitude>1) m_desiredMovementDirection = m_desiredMovementDirection.normalized;
}
}
public Vector3 desiredFacingDirection {
get { return m_desiredFacingDirection; }
set {
m_desiredFacingDirection = value;
if (m_desiredFacingDirection.magnitude>1) m_desiredFacingDirection = m_desiredFacingDirection.normalized;
}
}
public Vector3 desiredVelocity {
get {
//return m_desiredVelocity;
if (m_desiredMovementDirection==Vector3.zero) return Vector3.zero;
else {
float zAxisEllipseMultiplier = (m_desiredMovementDirection.z>0 ? maxForwardSpeed : maxBackwardsSpeed) / maxSidewaysSpeed;
Vector3 temp = new Vector3(m_desiredMovementDirection.x, 0, m_desiredMovementDirection.z/zAxisEllipseMultiplier).normalized;
float length = new Vector3(temp.x, 0, temp.z*zAxisEllipseMultiplier).magnitude * maxSidewaysSpeed;
Vector3 velocity = m_desiredMovementDirection * length;
return transform.rotation * velocity;
}
}
}
}
Так вот. Как можно сделать чтобы анимации воспроизводились в нужное время. То есть если двигаемся в бок, то воспроизводиться анимация движения в бок и тд. Пытался разобраться в скрипте AngryBots - безуспешно. Спасибо.