Put this in Update() =
//Flip the player's localScale.x
if the move speed is greater than .01 or less than -.01
if (targetVelocity.x < -.01)
{
transform.eulerAngles = new Vector3(0, 180, 0); // Flipped
}
else if (targetVelocity.x > .01)
{
transform.eulerAngles = new Vector3(0, 0, 0); // Normal
}
/*
**Beware; fliping a character using the sprite renderer won't flip important components like colliders attached to it
**To Correctly flip a character, Flip the character by changing the y rotation or by changing the scale of the x axis to -1 or 1
*/
///Fliping a character in Unity 2D
//Declare variables
bool _facingRight
void Update()
{
if (Input.GetAxisRaw("Horizontal") > 0 && !_facingRight)
{
Flip();
}
//
else if (_moveHorizontal < 0 && _facingRight )
{
//calls the flip method
Flip();
}
}
//Flip Method
void Flip()
{
//flips the character along the x axis using the sprite renderer correspondingly
gameObject.GetComponent<SpriteRenderer>().flipX = !gameObject.GetComponent<SpriteRenderer>().flipX;
//Sets the facingright bool to the opposite of what its currently at to prevent repeated flipping
_facingRight = !_facingRight;
//Flips the character by Rotating the character 180 degrees along the y axis
//gameObject.GetComponent<Rigidbody2D>().transform.Rotate(0, 180, 0);
//Flips the character by the changing the scale of the x axis to 1 or minus 1
//gameObject.GetComponent<Rigidbody2D>().transform.localScale = new Vector3(transform.localScale.x*-1, transform.localScale.y, transform.localScale.z);
}
//Checks if the left and right keys are pressed and flips the player accordingly
//Make sure the player scale on the x axis is 1
//Checks if the right key is pressed
if (moveHorizontal > 0)
{
rb2D.transform.localScale = new Vector3(1, transform.localScale.y, transform.localScale.z);
}
//Checks if Left Key is pressed
else if (moveHorizontal < 0)
{
rb2D.transform.localScale = new Vector3(-1, transform.localScale.y, transform.localScale.z);
}