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?
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.