how to change player rotation in topdown view game

hi I’m making a top down view game with basic player controls as I’m still fairly new to unity. I’m trying to get the player to rotate to face the direction they will move in. I’ve tried a lot of different ways to try and get it to work from things I’ve researched myself but just cant seem to get it to work properly I would really apricate if someone could help me out with this here is the current player movement method I’m using but it doesn’t rotate at all

void PlayerMovement()
    {
        if (spawnmanagerX.isGameActive)
        {
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                                
                transform.eulerAngles.Set(0, rotateLeft, 0);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.eulerAngles.Set(0, rotateRight, 0);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                transform.eulerAngles.Set(0, rotateUP, 0);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                transform.eulerAngles.Set(0, rotateDown, 0);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
        }
    }

You are rotating on the Y axis you need to rotate on the Z axis.
transform.eulerAngles.Set(0, rotateLeft, 0);
should be:
transform.eulerAngles.Set(0, 0, rotateLeft);

I edited your code and it is working for me pretty well now. Hope you can use it.

float speed = 1.0f;

    private void Update()
    {
        PlayerMovement();
    }

    void PlayerMovement()
    {
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.Rotate(0.0f, -1, 0.0f, Space.Self);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.Rotate(0.0f, 1, 0.0f, Space.Self);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                transform.Rotate( 1, 0.0f, 0.0f, Space.Self);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                transform.Rotate(-1, 0.0f, 0.0f, Space.Self);
                transform.position += transform.forward * speed * Time.deltaTime;
            }
    }

But you are talking about a top down game, so i think you’d rather like something like this:
float speed = 1.0f;

    private void Update()
    {
        PlayerMovement();
    }

    void PlayerMovement()
    {
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                transform.Rotate(0.0f, -1, 0.0f, Space.Self);
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                transform.Rotate(0.0f, 1, 0.0f, Space.Self);
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                transform.position += transform.forward * speed * Time.deltaTime;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                transform.position -= transform.forward * speed * Time.deltaTime;
            }
    }

Just put either of the scripts on your player and you’re good to go :slight_smile: The second version only rotates player in left and right direction on left and right arrow keys and only moves forwards/backwards on up and down arrow keys.

PS: if you want to change sensitivity just change “speed” value for movement or the “1” or “-1” to other values for rotation