# Top Down Keyboard Smooth rotation

Hi,

Im sorry I know this question was posted many times, but every solution I try, it wont work out :(((( im kinda desperate right now…

I have a top down game (axis) : y → up/down, x → left/right, z->in/out (not used for game)

Now the Controls:

float moveH = Input.GetAxis("Horizontal");
float moveV = Input.GetAxis("Vertical");

I want my playermodel turn into the keyboard direction. Best would be that when the player is facing top he has to do a half circle to go down, but that would be a luxury…

my solution:

Vector3 top = new Vector3(transform.position.x, transform.position.y + 10F, transform.position.z);
Vector3 down = new Vector3(transform.position.x, transform.position.y -10F, transform.position.z);
Vector3 left = new Vector3(transform.position.x-10F, transform.position.y, transform.position.z);
Vector3 right = new Vector3(transform.position.x+10F, transform.position.y, transform.position.z);

if(Input.GetKey(KeyCode.UpArrow)){
transform.LookAt(top);
}
if(Input.GetKey(KeyCode.DownArrow)){
transform.LookAt(down, -Vector3.forward);
}
if(Input.GetKey(KeyCode.LeftArrow)){
transform.LookAt(left, -Vector3.forward);
}
if(Input.GetKey(KeyCode.RightArrow)){
transform.LookAt(right, -Vector3.forward);
}

Every solution I tried f***ed my axis up. I never met the right ones… Except exactly this one

Would be great if anyone could help me

I made a solution which works. Its pretty straight forward. But it isnt possible to have you character look only a bit to one side. The player will always rotate fully to the given coordinates, maybe I m gonna find out how it works, to rotate only a little bit. But this is great for now

if (Input.GetKey (KeyCode.UpArrow)) {
qTo = Quaternion.Euler (-90, 0, 0);
}
if (Input.GetKey (KeyCode.DownArrow)) {
qTo = Quaternion.Euler (90, 180, 0);
}
if (Input.GetKey (KeyCode.LeftArrow)) {
qTo = Quaternion.Euler (0, 270, 90);
}
if (Input.GetKey (KeyCode.RightArrow)) {
qTo = Quaternion.Euler (0, 90, 270);
}
if (Input.GetKey (KeyCode.UpArrow) && Input.GetKey (KeyCode.LeftArrow)) {
qTo = Quaternion.Euler (315, 270, 90);
}
if (Input.GetKey (KeyCode.UpArrow) && Input.GetKey (KeyCode.RightArrow)) {
qTo = Quaternion.Euler (315, 90, 270);
}
if (Input.GetKey (KeyCode.DownArrow) && Input.GetKey (KeyCode.LeftArrow)) {
qTo = Quaternion.Euler (45, 270, 90);
}
if (Input.GetKey (KeyCode.DownArrow) && Input.GetKey (KeyCode.RightArrow)) {
qTo = Quaternion.Euler (45, 90, 270);
}

transform.rotation = Quaternion.RotateTowards (transform.rotation, qTo, speedQuad * Time.deltaTime);