I\'ve tried to change the image of my object with this code (used as Sprite cast):
GetComponent().sprite = Resources.L
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.
Resources.Load("GameObjects/Tiles/Hole") as Sprite;
You have another "Hole" in your Resources folder. This other-Hole is not a Sprite
. Therefore when you use as Sprite
it simply can't be casted to one and won't throw an exception (on that line) because:
The as operator is like a cast operation. However, if the conversion isn't possible, as returns null instead of raising an exception.
Resources.Load<Sprite>("GameObjects/Tiles/Hole");
In the working code you specify which file you want, the Sprite
, so it finds the correct one.