# Why is the character not walking right when creating new animator controller for the character?

I created a new controller called it SoldierController and dragged it to the character Controller under Animator component in the Inspector.

Also unchecked Apply Root Motion

Then attached a new script to the third person character called the script Soldier.

Then I set the Animator controller and I added two new States to it:
Walk and Idle. HumanoidIdle and HumanoidWalk.

Then I did that the default start state will be Idle. Set StateMachine Default State.

Then I did a Transition from Walk to Idle. This way when I press on "W" it starts walking a bit. Then it keep moving the character but without the walking animation.

If I delete this transition and make transition from the Idle to Walk then when I press on "W" it will walk but then if I leave "W" key it's idling.

Then after 2-3 seconds the character will walk on place I mean it will animate walking without moving and I'm not pressing anything it's starting automatic when idling.

The character had another animator controller but I created a new one and using only the new one.

The script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Soldier : MonoBehaviour
{
private bool _isWalking = false;
private Animator anim;

// Use this for initialization
void Start ()
{
anim = GetComponent<Animator>();
}

// Update is called once per frame
void Update ()
{
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;

transform.Rotate(0, x, 0);

if (Input.GetKey("w"))
{
if (!_isWalking)
{
_isWalking = true;
anim.Play("Walk");
}
var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
transform.Translate(0, 0, z); // Only move when "w" is pressed.
}
else
{
if (_isWalking)
{
anim.Play("Idle");
}
_isWalking = false;
}
}
}


remove the time.DeltaTime from where you want to pick up the horizontal input. In the animator create a horizontal movespeed parameter and set idle as the default anim. then when you transition set the param float 'horizontalspeed' to if greater than .1 it will transition to walk. then in your playerscript you can have the horizontal input update the parameter anim.SetFloat("HorizontalSpeed", Mathf.Abs(x));