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
Answer by Asdf11x · Jun 09, 2016 at 09:17 AM
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);
Your answer
Follow this Question
Related Questions
How to make an skidmarks system on a 2D top-down car sprite? 0 Answers
2D Animations in Unity with multiple Sprites 0 Answers
[2D] Make player push object 1 Answer
2D Movement Controls Like a Dying Fly 0 Answers
LookAt method is stuck on one axis, Why? 0 Answers