Unity Resources.Load<Sprite> vs as Sprite

load, renderer, resources, sprite, unity-game-engine

Solution

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 texure = 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.

Problem

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?

Original source