Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
统一C#;什么';这是Resources.load(PNG文件路径)始终返回null的原因吗?_C#_Unity3d - Fatal编程技术网

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

统一C#;什么';这是Resources.load(PNG文件路径)始终返回null的原因吗?,c#,unity3d,C#,Unity3d,我想更改单击“图像”按钮的图像。 因此,我设置了一个按钮,并尝试在assets/Resources/PATH处加载一个PNG文件。 但它总是回来,它让我聚集起来。 有些问题像我的情况,每个人都回答“尝试移动文件以加载资产/资源路径,但我的情况无法通过这种方式修复。” 这是我的密码。此函数用于在单击图像按钮时加载NumCard_1.png文件。NumCard_1.png存在于资产/资源文件夹中 void OnclkMe() { Sprite newSprite = Resources.Lo

我想更改单击“图像”按钮的图像。 因此,我设置了一个按钮,并尝试在assets/Resources/PATH处加载一个PNG文件。 但它总是回来,它让我聚集起来。 有些问题像我的情况,每个人都回答“尝试移动文件以加载资产/资源路径,但我的情况无法通过这种方式修复。”

这是我的密码。此函数用于在单击图像按钮时加载NumCard_1.png文件。NumCard_1.png存在于资产/资源文件夹中

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);
    }
}
void OnclkMe()
{
Sprite newSprite=Resources.Load(“/NumCard_1”)作为Sprite;
//我已经在上面尝试了(“NumCard_1”)。
if(newSprite==null)
{
Debug.Log(“NULL”);//始终打印“NULL”-\u-。
}
其他的
{
Debug.Log(newSprite.name);
}
}

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


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

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

其次,Resources.Load(“/NumCard_1”)作为Sprite被滥用了。 泛型方法Resources.Load返回T,因此您可以删除“as Sprite”(其行为相同)

由于Unity使用“Resources”作为基本文件夹,您应该删除“NumCard”之前的“/”。 如果使用子文件夹,可能需要将路径指定为“Cards/NumCard_1”

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

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

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

首先,你应该像这样检查它

var obj = Resources.Load("NumCard_1");
Debug.Log(typeof(obj));
var obj = Resources.Load<Sprite>("NumCard_1");
如果obj不是null,它会告诉您它是什么类型。如果不是sprite,则需要转到unity编辑器,选择文件,并将png的导入类型更改为sprite

ps使用泛型意味着你可以这样写

var obj = Resources.Load("NumCard_1");
Debug.Log(typeof(obj));
var obj = Resources.Load<Sprite>("NumCard_1");
var obj=Resources.Load(“NumCard_1”);

而obj将是精灵。如果它不是一个精灵,它将是空的

文件夹名称必须在资产中命名为“Resources”

尝试如下:
sprite newSprite=Resources.Load(“NumCard_1”)作为精灵加载函数基本上将资源中的任何资源文件夹视为可能的相对路径,因此您不会在字符串的前面放置
/
。如果它直接位于资源文件夹中,只需使用文件名,否则类似于
子文件夹/NumCard_1
。如果您使用的是Load的通用版本,则不需要“as Sprite”。只需强调一点:资源文件夹在资源文件夹中的位置以及资源的数量无关紧要。您可以使用
资源/纹理/资源
+
资源/资源/材质
+
资源/网格/资源
,这将非常有效。显然,我们建议对文件夹结构采用逻辑方法。typeof(obj)是一个错误。”obj'是一个变量,但与类型类似@김보근 抱歉它
Debug.Log(obj.GetType())但是它非常有用。当我使用断点时,它给了我obj类型是Texture2D。我可以将此类型的Texture2D转换为UISprite吗?我使用NGUI@김보근我不知道如何使用NGUI,但它主要需要在unity编辑器中完成,而不是在代码中完成。也许您需要创建UISprite预置并将该纹理添加到其中,因为我想在单击ImageButton时更改其图像。所以我认为这必须用c#脚本完成。我成功加载了NumCard_01.png。但是如何更改imagebutton的图像呢。GameObject.GetComponent正在使用,但不起作用。