# Why are the A, and D input keys,both moving my character right?

So ive been trying to get this 2.5D Player controller working they way i want for a day now. Ive tried multiple methods and finaly came up with a solution for my problem getting the player to face the direction im moving, however now my player only moves right.

I think it has to do with the problematic peice of code i will highlight bellow, as when i remove it, the movement works fine, but im not sure. i will also post the full code below that just in case.

Problem code:

``````// Get Axis for player input

var x = Input.GetAxis("Horizontal") * Time.deltaTime * walk;
var z = Input.GetAxis("Vertical") * Time.deltaTime * walk;

transform.Rotate(0, 0, 0);
transform.Translate(0, 0, x);

//Rotate character in the direction they're moving
if (x != 0)
{
if (x > 0)
transform.forward = new Vector3(1, 0, 0);
else if (x < 0)
transform.forward = new Vector3(-1, 0, 0);
}
``````

full code :

``````using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

public float walk = .7f;
public Animation anim;

void Start ()
{

anim = GetComponent<Animation>();

}
void Update()

{

// Get Axis for player input

var x = Input.GetAxis("Horizontal") * Time.deltaTime * walk;
var z = Input.GetAxis("Vertical") * Time.deltaTime * walk;

transform.Rotate(0, 0, 0);
transform.Translate(0, 0, x);

//Rotate character in the direction they're moving
if (x != 0)
{
if (x > 0)
transform.forward = new Vector3(1, 0, 0);
else if (x < 0)
transform.forward = new Vector3(-1, 0, 0);
}

anim ["walk_normal"].speed = 2f;

if(Mathf.Abs(Input.GetAxis("Horizontal"))>0.1F)
anim.Play("walk_normal");

else
anim.Play ("idle_normal");

Thanks
``````

Chris

You move the transform forward x units every frame. The problem is x can be positive or negative and you also rotate the transform based on the sign of x.

So if x is 5, you set the forward vector to be 1,0,0 and move the transform to that direction times x:
5 * (1,0,0) = (5,0,0)

If x is -5 you set the forward vector to be -1,0,0 and move the transform to that direction times x:
-5 * (-1,0,0) = (5,0,0)

You should disregard the sign of x when moving since the rotation of the transform already handles the direction

`````` transform.Translate(0, 0, Mathf.Abs(x));
``````