为什么Resources.Load <sprite>返回null?</sprite>

时间:2014-07-27 04:45:34

标签: unity3d unityscript

我的项目有多个sprite位于Assets \ Sprites中,我想用C#脚本加载。

我测试了这个:

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

myFruit仍为空。

8 个答案:

答案 0 :(得分:55)

Resources.Load将在Assets/Resources中搜索目录。

如果您想将其放入Sprites目录,请将其放在Resources内(例如Assets/Resources/Sprites)。

然后您可以像这样加载它:

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

还要确保在检查器中将图像类型设置为Sprite。

如果要加载多个精灵,请使用:

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

有关详细信息,请参阅this

答案 1 :(得分:3)

awesome.png放入Assets/Resources/(您可以拥有子文件夹),然后使用:

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

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

还有LoadAll &#34;在资源文件夹中的路径中加载文件夹或文件中的所有资源。&#34;

答案 2 :(得分:0)

您需要输入资产的完整路径。在这种情况下,请尝试使用路径&#34; Sprites / Graphics_3&#34;。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

Resources.Load正在“资产/资源”目录中搜索 这就是你需要做的原因

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

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

使用spritesPath作为相对路径。 如果需要从“Assets / Resources / Sprites”文件夹中加载所有内容,则只需要编写“Sprites”。

之后您可以执行以下操作:

var sprite = sprites[0];

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

答案 5 :(得分:0)

Unity的脚本参考并不表示您需要在<Sprite>之后立即编写Load。所以我在加载sprite时遇到了问题,尽管我的精灵在Resources目录中。

答案 6 :(得分:0)

我只是使用Resources.Load加载我的精灵,发现结果是Texture2D。因此,我使用Sprite.Create通过Textur2D创建了一个新的精灵,以解决此问题。

答案 7 :(得分:0)

我知道这是一篇旧帖子,但是,如果仅加载资源仍然无法正常工作,那么我们也必须添加纹理。我是这样做的。

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;