- Home /
Rotating a character
Hello there! I was trying to make a character rotate in the direction that the player moves. However when I set the rotation, it just sets the rotation to either 180 or 0 (only "w" actually sets the rotation i want it to).
if (Input.GetKey("w"))
{
transform.Translate(0, charSpeed * Time.deltaTime, 0);
walking = true;
animTimer = 5.0f;
transform.rotation = new Quaternion(transform.rotation.x, transform.rotation.y, 0, 0);
}
if (Input.GetKey("s"))
{
transform.Translate(0, -charSpeed * Time.deltaTime, 0);
walking = true;
animTimer = 5.0f;
transform.rotation = new Quaternion(transform.rotation.x, transform.rotation.y, 270, 0);
}if (Input.GetKey("d"))
{
transform.Translate(charSpeed * Time.deltaTime, 0, 0);
walking = true;
animTimer = 5.0f;
}
if (Input.GetKey("a"))
{
transform.Translate(-charSpeed * Time.deltaTime, 90, 0);
walking = true;
animTimer = 5.0f;
}
Thank you in advance to anyone who can help me out!
Answer by Raresh · Jan 31, 2016 at 08:52 PM
That's not how Quaternions work, please use eulerAngles instead.
Answer by $$anonymous$$ · Feb 01, 2016 at 05:11 PM
You almost never access or modify individual Quaternion components (x,y,z,w); most often you would just take existing rotations (e.g. from the Transform) and use them to construct new rotations (e.g. to smoothly interpolate between two rotations). Read more about Quaternions here!
So, using Transform.Rotate, your line of code should be something like this:
transform.Rotate(0f, 0f, 270f);
Answer by wolfenstien98 · Jan 31, 2016 at 09:53 PM
As a rule you should never alter Quaternions directly, instead use Transform.Rotate
Your answer
Follow this Question
Related Questions
Quaternion amount/value of rotation? 2 Answers
Keep objects current rotation, with Input Mouse X 0 Answers
Rotate Character after a certain angle 1 Answer
How to get smooth analog joystick rotation without "snapping"? 2 Answers
Precise rotation based on joystick axis input for twin-stick controls 3 Answers