Hi! I'm very new to the Unity engine (and to programming as well), I did a few basic projects (Text based adventure game and a basic block breaker with particles and sound). I have basic knowledge of programming, but lately I've been trying to code a "controller" for my 2 character many different ways and I can't find the right one. (I have animations done that I linked with the character's movements) First I tried moving it with the arrows, using two floats for the Horizontal and Vertical axis (like this) : Code (CSharp): publicAnimator anim; publicRigidbody2D rbody; private float inputH; private float inputV; anim = GetComponent<Animator>(); rbody = GetComponent<Rigidbody2D>(); inputH = Input.GetAxis("Horizontal"); inputV = Input.GetAxis("Vertical"); anim.SetFloat("inputH", inputH); anim.SetFloat("inputV", inputV); float moveX = inputH*230f*Time.deltaTime; float moveY = inputV*230f*Time.deltaTime; But it didn't work out as I wanted and my character was like "sliding" on ice when moving and didn't stop right when I stopped pressing the key. I am right now trying my way with some very ugly, messy and heavy code but it's the only way that comes to my mind, I haven't been able to find a good tutorial online on 2D Sprite movement. Code (CSharp): public Animator anim; public Rigidbody2D rbody; void Start () { anim = GetComponent<Animator>(); rbody = GetComponent<Rigidbody2D>(); } if (Input.GetKeyDown("d")) { anim.Play("PlayerRun(R)", -1); rbody.velocity = new Vector2(1.6f, 0f); } if (Input.GetKeyUp("d")) { anim.Play("PlayerIdle(R)", -1); rbody.velocity = new Vector2(0f, 0f); } //RUN LEFT if (Input.GetKeyDown("q")) { anim.Play("PlayerRun(L)", -1); rbody.velocity = new Vector2(-1.6f, 0f); } if (Input.GetKeyUp("q")) { anim.Play("PlayerIdle(L)", -1); rbody.velocity = new Vector2(0f, 0f); } //JUMP if (Input.GetKey(KeyCode.Space)) { anim.Play("PlayerJump(R)", -1); //int jumP = rbody.velocity = new Vector3(0f, 5f, 0f); } //ATTACKS if (this.anim.GetCurrentAnimatorStateInfo(0).IsName("PlayerIdle(R)") && Input.GetKeyDown("k")) { anim.Play("PlayerSlash1(R)", -1); } if (this.anim.GetCurrentAnimatorStateInfo(0).IsName("PlayerSlash1(R)") && Input.GetKeyUp("k")) { anim.Play("PlayerIdle(R)", -1); } if (this.anim.GetCurrentAnimatorStateInfo(0).IsName("PlayerIdle(R)") && Input.GetKeyDown("l")) { anim.Play("PlayerSlash2(R)", -1); } if (this.anim.GetCurrentAnimatorStateInfo(0).IsName("PlayerSlash2(R)") && Input.GetKeyUp("l")) { anim.Play("PlayerIdle(R)", -1); } Right now, everything works fine, my character doesn't slide and it does stop moving when I release the "D" key, although I know what I'm writing is terrible and will break at some point. I would really appreciate if anyone would help me out there an explain and show precisely how I should code any 2D Character controller. Thanks ! PS: (Here's a video of how it works as for now : ) I do not claim the property of the sprites, they're property of GregarLink10 (http://gregarlink10.deviantart.com/)