- Home /
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;
}
}
}
Answer by logicandchaos · May 03, 2020 at 05:10 PM
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);
Answer by RunRockRise · May 04, 2020 at 10:03 AM
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 :) 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
Your answer
Follow this Question
Related Questions
How to get Angle float of specific axis.(Turret clamping related). 2 Answers
When applying a 90 degree rotation to Euler Angles, it is over/undershooting sometimes.. 2 Answers
Detecting Opposite Rotations of two Pipes 1 Answer
[OAFAT]Why does transform.rotation.x = 45 not work 3 Answers
How to rotate an object around another 60 degrees with a keypress? 0 Answers