Buenas.
No sé a que te refieres con el problema de 'animación pegado a la pared'.
Yo lo que hago cuando tengo varias animaciones y ya tienes el AnimatorController con los diferentes estados (animaciones) es utilizar como parámetro la velocidad a la que se mueve el personaje (una propiedad de tipo float dentro del script). Paso el valor de dicha variable al animator y el AnimatorController pasa de un estado a otro (parado, andando, corriendo) en función de la velocidad.