Unity Resources.Load<Sprite> vs as Sprite

Ferenc Dajka picture Ferenc Dajka · Feb 20, 2015 · Viewed 10.1k times · Source

I've tried to change the image of my object with this code (used as Sprite cast):

GetComponent<SpriteRenderer>().sprite = Resources.Load("GameObjects/Tiles/Hole") as Sprite;

It did not work, however this worked (used <Sprite>):

GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("GameObjects/Tiles/Hole");

What's the difference?

Answer

Mars picture Mars · Mar 30, 2016

FunctionR's answer is probably the more common answer, and I may just be wrong here, but I believe the difference between Load() and Load<T>() is that Load<T>() checks for meta-data. "Hole" is not a Sprite, it's an image file. Load() finds that image file and loads it as it's default type for the file type, in this case Texture2D.

In other words, you can't use as Sprite because you cannot cast a Texture2D to a Sprite. You CAN, however, use

    Texture2D = Resources.Load("GameObjects/Tiles/Hole");
    Rect rect = {whatever};
    Vector2 pivot = {whatever};
    Sprite.Create(texture, rect, pivot);

but this requires you to know the size of the Sprite you were trying to load.

In summary, Load() treats it based solely on the file type you're loading, Load<T>() includes metadata.