Brian Nguyen
Brian Nguyen

Reputation: 485

Why does Resources.Load <Sprite> return null?

My project has multiple sprites located in Assets\Sprites which I want to load using C# script.

I have tested this:

Sprite myFruit = Resources.Load <Sprite> ("Graphics_3");

But myFruit is still null.

Upvotes: 33

Views: 92292

Answers (9)

user2118985
user2118985

Reputation: 11

I required a different solution for this problem. When i carefully inspected my sprite, I saw the dropdown "Sprite Mode" was empty (even though that shouldn't be even possible I think). Once I selected single and applied the changes, the problem went away.

Upvotes: 1

apex
apex

Reputation: 849

I know this is an old post but, if it still does not work by just loading the resources, then we have to add the texture as well. I did it in this way.

Texture2D texture = Resources.Load<Texture2D>("Sprites/imageName");
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
btnImage.image.sprite = sprite;

Upvotes: 1

司马滔滔
司马滔滔

Reputation: 1

I just used Resources.Load to load my sprite and found the result is Texture2D. So I Use Sprite.Create to create a new sprite with Textur2D to fix this problem.

Upvotes: 0

Andrey Bocharkov
Andrey Bocharkov

Reputation: 1

Unity's scripting reference doesn't says that you need write <Sprite> right after Load. So I had problem with loading sprites, although my sprite was in Resources directory.

Upvotes: 0

Andrew_STOP_RU_WAR_IN_UA
Andrew_STOP_RU_WAR_IN_UA

Reputation: 11426

Resources.Load are searching in the directory "Assets/Resources" That's why you need to do

_sprites = Resources.LoadAll<Sprite>(spritesPath);

or

_sprites = Resources.Load<Sprite>(spritesPath);

with spritesPath as relative path. If you need to load all from folder "Assets/Resources/Sprites", you need to write only "Sprites".

after this you can just do the following:

var sprite = sprites[0];

or

var sprite = _sprites.Where(a => a.name == "Sprite_Name_Needed").First();

Upvotes: 0

Jay Kazama
Jay Kazama

Reputation: 3277

Resources.Load will search for a directory in Assets/Resources.

If you want to put it to Sprites directory then put it inside Resources (ex. Assets/Resources/Sprites).

Then you can just load it like this:

Sprite myFruit = Resources.Load <Sprite> ("Sprites/Graphics_3");

Also make sure that you've set your image type to Sprite in the inspector.

If you want to load multiple sprites, use this:

Sprite[] myFruit = Resources.LoadAll <Sprite> ("Sprites/Graphics_3");  

See this for more details.

Upvotes: 71

Shaik Azeed
Shaik Azeed

Reputation: 1

    Sprite sp = Resources.LoadAll<Sprite> ("Sprites/AI-Avtar") [2] as Sprite;

Upvotes: 0

Anis Abboud
Anis Abboud

Reputation: 1378

Place awesome.png in Assets/Resources/ (you can have subfolders), and use:

GetComponent<SpriteRenderer>().sprite = 
    Resources.Load<Sprite>("awesome");  // No file extension.

http://docs.unity3d.com/ScriptReference/Resources.html

There's also LoadAll that "Loads all assets in a folder or file at path in a Resources folder."

Upvotes: 3

ChrisWebb
ChrisWebb

Reputation: 395

You need to enter the full path for the asset. In this case, try using the path "Sprites/Graphics_3".

Upvotes: 0

Related Questions