using the animator stops movement

here’s my script, it seems that using SetTrigger just kills movement on whatever axis its assigned to,
when using if (h * v != 0) it alows very stiff movement one arrow key at a time or it freezes.

public class control : MonoBehaviour {

public Animator anim;

[HideInInspector]
public bool facingRight = true;			// For determining which way the player is currently facing.
[HideInInspector]
public bool jump = false;
//[HideInInspector]
//public bool run = false;

	public float speed = 6.0F;
	public float jumpSpeed = 8.0F;
	public float gravity = 20.0F;
	private Vector3 moveDirection = Vector3.zero;

void awake()
{
anim = GetComponent<Animator>();
}

	void Update() {

	float h = Input.GetAxis ("Horizontal");
	float v = Input.GetAxis ("Vertical");

	if (speed != 0f)
		anim.SetTrigger ("run");

		CharacterController controller = GetComponent<CharacterController>();
		if (controller.isGrounded) {
		moveDirection = new Vector3(h, 0, v);
			moveDirection = transform.TransformDirection(moveDirection);
			moveDirection *= speed;

		// If the input is moving the player right and the player is facing left...
		if ( h > 0 && !facingRight)
			// ... flip the player.
			Flip ();

		// Otherwise if the input is moving the player left and the player is facing right...
		else if ( h < 0 && facingRight)
			// ... flip the player.
			Flip ();
			if (Input.GetButton("Jump"))
			moveDirection.y = jumpSpeed;

		}
		moveDirection.y -= gravity * Time.deltaTime;
		controller.Move(moveDirection * Time.deltaTime);
	}
void Flip ()
{
	// Switch the way the player is labelled as facing.
	facingRight = !facingRight;

	// Multiply the player's x local scale by -1.
	Vector3 theScale = transform.localScale;
	theScale.x *= -1;
	transform.localScale = theScale;
}

}

Not sure if you’re doing this, but if you’re animating position on a GameObject, position is overwritten by the Animator while the animation is being run, then handed back over to the code once the animation has been stopped.