Unity C#; Resources.load(PNG文件路径)始终返回null的原因是什么?

时间:2016-06-21 08:55:09

标签: c# unity3d

我想更改点击图片按钮的图片。 所以,我设置了一个按钮并尝试在assets / Resources / PATH加载PNG文件。 但它总是回归,它让我迷失了-_-。 一些问题喜欢我的情况,每个人都回答'尝试移动文件加载资产/ Resoucres PATH,我的情况不能这样修复。

这是我的代码。单击图像按钮时,此功能将加载NumCard_1.png文件。 NumCard_1.png存在于assets / Resources文件夹中。

void OnclkMe()
{
    Sprite newSprite = Resources.Load<Sprite>("/NumCard_1") as Sprite;
    // I already try ("NumCard_1") instead above.
    if(newSprite==null)
    {
        Debug.Log("NULL");    // Always prints "NULL" -_-.
    }
    else
    {
        Debug.Log(newSprite.name);
    }
}

4 个答案:

答案 0 :(得分:3)

在Unity中使用Resources.Load时,它使用一个相对文件夹来&#34;资源&#34; 您打算在运行时使用的每个资源都必须位于/ Resources下,如果它在那里 - 创建它。 创建此基本文件夹后(在“资源”下),您可以根据自己的喜好创建子文件夹。

其次,作为Sprite的Resources.Load(&#34; / NumCard_1&#34;)被滥用了。 通用方法Resources.Load返回T,因此您可以删除&#34;作为Sprite&#34; (它将采取相同的行动)。

Unity使用&#34;资源&#34;作为基本文件夹,你应该删除&#34; /&#34;之前&#34; NumCard&#34;。 如果您使用子文件夹,您可能希望将路径指定为&#34; Cards / NumCard_1&#34;。

根据您的代码,在创建文件夹Assets / Resources并将img放入其中后,请尝试以下操作:

Sprite newSprite = Resources.Load<Sprite>("NumCard_1")

答案 1 :(得分:0)

在资源文件夹中添加您的精灵。 将纹理类型更改为Sprite,然后应用。

Sprite newSprite = Resources.Load(“NumCard_1”,typeof(Sprite))为Sprite;

答案 2 :(得分:0)

也许你没有将该文件的import配置设置为sprite?通常png将作为纹理导入,而不是精灵

首先你应该尝试像这样检查

var obj = Resources.Load("NumCard_1");
Debug.Log(typeof(obj));

如果obj不为null,它会告诉你它是什么类型。如果它不是精灵,你需要转到统一编辑器,选择文件,并将png的导入类型更改为精灵

ps使用通用意味着你可以写就像这样

var obj = Resources.Load<Sprite>("NumCard_1");

obj将是精灵。如果它不是精灵,那么它将为null

答案 3 :(得分:-1)

文件夹名称必须在资产

中命名为“资源”