I have a top down game where I want the character to move in 8 directions. I have written the following script to move the character (_this is called from my Update function): void Move_VelocityForwardStrategy() { Vector3 direction = Vector3.zero; float horizInput = Input.GetAxis(“Horizontal”); float vertInput = Input.GetAxis(“Vertical”); if (horizInput > 0) { direction += Vector3.right; }; if (horizInput < 0) { direction += Vector3.left; }; if (vertInput > 0) { direction += Vector3.forward; }; if (vertInput < 0) { direction += Vector3.back; }; bool walking = direction != Vector3.zero; if (walking) { // Debug.Log(“walking”); Vector3 newDir = Vector3.RotateTowards(playerModel.transform.forward, direction, 1, 0.0f); playerModel.transform.rotation = Quaternion.LookRotation(newDir); playerRigidBody.velocity = newDir * movementSpeed; // Debug.Log(newDir * movementSpeed); } else { // Debug.Log(“Not walking”); playerRigidBody.velocity = Vector3.zero; } playerAnimator.SetBool(“walking”, walking); } Some parts of this do work. The character does rotate to face the correct direction and does the walk animation. The broken behavior is with the actual walking. If I press up, the character moves forward along the z-axis as expected. But if I press down, they also move forward! And If I press left or right, they don’t move at all.