被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实
例化。
实际使用分为两种情况:
abc
是预制体,你应该加载预制体,然后取其身上的组件获取需要的Sprite
;abc
是图片,那么直接加载Sprite
,然后赋值即可;两种情况均不需要实例化的过程
通常遇到这种打印结果和常量字符串一样,但是验证并不相等的情况下。你可以验证一下字符串的长度是否一致,或者每个字符验证一下。一般都可以得到答案。你需要创建的可能是SpriteRenderer而不是Sprite。Sprite加载后并不需要Instantiate实例化。另外并不推荐加载图像后再去创建SpriteRenderer然后赋值,这需要初始化很多东西比较麻烦。建议你改为加载预制体可以避免修改一点点又要编译代码的烦恼
var img = Resources.Load<Sprite>("img");
var spriteRenderer= Resources.Load<GameObject>("spriteRenderer");
spriteRenderer.GetComponent<SpriteRenderer>().sprite = img;