Unity-Resources Load问题

被Resources.Load整崩溃了,问题如下:

1)代码1
string a = Data_Player.name; //Data_Player.name是静态变量,值等于Resources/Prefabs文件夹下文件的文件名"abc"。
Debug.Log(a); //正确显示这个文件名 "abc"
Sprite c = Instantiate(Resources.Load("Prefabs/" + a, typeof(Sprite)) as Sprite);
Debug.Log(c);
这个代码报错,提示实例化失败。

2)代码2,直接赋值文本
string a = "abc"
Sprite c = Instantiate(Resources.Load("Prefabs/" + a, typeof(Sprite)) as Sprite);
Debug.Log(c);
这个代码运行正常。

请帮忙看下这是什么情况,为什么引用静态变量不行,直接赋值就可以?


用if函数验证,Data_Player.ID 不等于 "abc", 但Debug.Log(Data_Player.ID)显示的又是 "abc"。

if (Data_Player.ID == "abc") { Debug.Log("是"); }
else { Debug.Log("否"); }
结果返回"否"。

通常,将资源路径,新建一个class,单独存储 在其他类中直接调取该类中的字符串常量的资源路径​

在其他类中,调取,声明游戏对象,赋值,当然还有 加载其他自愿的方式,暂不举例,以后再添加

首先你需要明确自己要做什么,实例化Sprite这个逻辑就不太对,如果你是需要实现动态换图的逻辑,直接1Resources.Load1加载完成赋值就可以了,不需要Instantiate实例化。

实际使用分为两种情况:

  1. 你的abc是预制体,你应该加载预制体,然后取其身上的组件获取需要的Sprite
  2. 你的abc是图片,那么直接加载Sprite,然后赋值即可;

两种情况均不需要实例化的过程

通常遇到这种打印结果和常量字符串一样,但是验证并不相等的情况下。你可以验证一下字符串的长度是否一致,或者每个字符验证一下。一般都可以得到答案。你需要创建的可能是SpriteRenderer而不是Sprite。Sprite加载后并不需要Instantiate实例化。另外并不推荐加载图像后再去创建SpriteRenderer然后赋值,这需要初始化很多东西比较麻烦。建议你改为加载预制体可以避免修改一点点又要编译代码的烦恼

        var img = Resources.Load<Sprite>("img");
        var spriteRenderer= Resources.Load<GameObject>("spriteRenderer");
        spriteRenderer.GetComponent<SpriteRenderer>().sprite = img;