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!

That’s not how Quaternions work, please use eulerAngles instead.

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);

As a rule you should never alter Quaternions directly, instead use Transform.Rotate

As @wolfenstien98 said, use Transform.Rotate!!!