问题
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.
回答1:
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.
回答2:
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."
回答3:
You need to enter the full path for the asset. In this case, try using the path "Sprites/Graphics_3".
回答4:
Sprite sp = Resources.LoadAll<Sprite> ("Sprites/AI-Avtar") [2] as Sprite;
回答5:
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();
回答6:
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.
来源:https://stackoverflow.com/questions/24977986/why-does-resources-load-sprite-return-null