EulerAngles / localEulerAngles Issue

I’m working on a top-down 2D game. I’ve been told that using localScale to flip the player’s direction facing can lead to some bugs. So I decided to run with the more “recommended approach” eulerAngles. Movement up/down works perfectly; however, when I press left or right movement, the player moves upward.

if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) // Move Forward
        {
            player.transform.Translate(Vector2.up * speed * Time.deltaTime);
            transform.eulerAngles = new Vector2(0, 180);
        }

        if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) // Move Bacward
        {
            player.transform.Translate(Vector2.down * speed * Time.deltaTime);
            transform.eulerAngles = new Vector2(0, 0);
        }

        if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) // Move Left
        {
            player.transform.Translate(Vector2.left * speed * Time.deltaTime);
            transform.localEulerAngles = new Vector3(0,0,-90);
        }

        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) // Move Right
        {
            player.transform.Translate(Vector2.right * speed * Time.deltaTime);
           transform.localEulerAngles = new Vector3(0,0,90);
        }

I’m using x,y to move on so the Z-axis is my rotation point. The player does look in the desired direction but moves “up” when the A or D key is pressed. I need the player moving left/right.

just try other direction :smile:

if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) // Move Left
        {
            transform.Translate(Vector2.down * speed * Time.deltaTime);
            transform.localEulerAngles = new Vector3(0, 0, -90);
        }

        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) // Move Right
        {
            transform.Translate(Vector2.down * speed * Time.deltaTime);
            transform.localEulerAngles = new Vector3(0, 0, 90);
        }

or take world direction

if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) // Move Left
        {
            transform.Translate(Vector2.left * speed * Time.deltaTime, Space.World);
            transform.localEulerAngles = new Vector3(0, 0, -90);
        }

        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) // Move Right
        {
            transform.Translate(Vector2.right * speed * Time.deltaTime, Space.World);
            transform.localEulerAngles = new Vector3(0, 0, 90);
        }
1 Like

Space.World to the rescue lol

Thanks bro! I appreciate the help! Works perfectly!