AlexxS_
AlexxS_

Reputation: 27

Unity 2D sprite doesn't flip

I'm doing a platformer game with Unity 2D and I wanted to flip the character sprite left when the player move him left, but for some reasons it doesn't work. I tried to make this one script:

transform.rotation = new Vector3(0f, 180f, 0f);

but it didn't work. So then I wrote this:

transform.localScale = new Vector3(-0.35f, 0.35f, 1f); //the player's scale x and y are 0.35 by default

but it didn't work too. Then I found this error message in the console: NullReferenceException: Object reference not set to an instance of an object UnityEditor.Graphs.Edge.WakeUp () (at C:/buildslave/unity/build/Editor/Graphs/UnityEditor.Graphs/Edge.cs:114).

What should I do? I'm doing this game for a game jam so I need to resolve this problem quickly. Thank you.

EDIT: I noticed that I can flip the sprite in the editor, but that I can't do that using scripts.

Upvotes: 1

Views: 2534

Answers (3)

Urasquirrel
Urasquirrel

Reputation: 1585

This is a bit old so be sure to let me know how this works. You'll need to finish the rest of the controls, but this should work.

      public class SpriteFlipper : MonoBehaviour
{
   // variable to hold a reference to our SpriteRenderer component
   private SpriteRenderer mySpriteRenderer;

   // This function is called just one time by Unity the moment the component loads
   private void Awake()
   {
        // get a reference to the SpriteRenderer component on this gameObject
        mySpriteRenderer = GetComponent<SpriteRenderer>();
   }

   // This function is called by Unity every frame the component is enabled
   private void Update()
   {      
        // if the A key was pressed this frame
        if(Input.GetKeyDown(KeyCode.A))
        {
            // if the variable isn't empty (we have a reference to our SpriteRenderer
            if(mySpriteRenderer != null)
            {
                 // flip the sprite
                 mySpriteRenderer.flipX = true;
            }
        }
    }
}

Upvotes: 0

olibsjr
olibsjr

Reputation: 91

From this thread I found, it seems like an old bug from Unity's UnityEditor.Graphs.DLL code.

Try restarting Unity completely.

This bug seems to occur only in the editor, and not after a game is built, so you should be safe.

Upvotes: 2

HelloWorld42
HelloWorld42

Reputation: 3

I haven't worked on any 2D Unity projects in a while but here is a piece of code I used to resolve that issue in the past. Let me know if it helps.

    private void FlipSprite()
        {
            bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > Mathf.Epsilon;
            if(playerHasHorizontalSpeed)
            {
                        transform.localScale = new Vector2(Mathf.Sign(myRigidBody.velocity.x), 1f);

            }
        }

Upvotes: 0

Related Questions