U2L10-1——Resources资源同步加载

Resources动态加载资源的方法,让对象拓展性更强
相对拖曳来说 它更加一劳永逸 更加方便

重要知识点:记住API
记住一些特定的格式
预设体加载出来一定要实例化

本章代码关键字

1
2
3
4
5
6
7
Resources.Load()        //读取Resources文件夹下的指定名字的文件,返回Unity的Object,需要自行转换
Resources.Load(, typeof()) //读取Resources文件夹下的指定名字指定类型的文件,返回Unity的Object,需要自行转换
Resources.LoadAll() //读取Resources文件夹下的指定名字所有类型的文件,返回Unity的Object数组
Resources.Load<>() //读取Resources文件夹下的指定名字指定类型的文件的泛型方法,返回对应类型
TextAsset //Unity的文本资源类
textAsset.text //Unity的文本资源的文本内容
textAsset.bytes //Unity的文本资源的字节数据组

资源同步加载普通方法

如果文件放在Resources文件夹下的某个文件夹内,需要加上路径

预设体对象

想要创建预设体在场景上 要记住实例化

  • 第一步:要去加载预设体的资源文件(本质上就是加载配置数据在内存中)
  • 第二步:如果想要在场景上创建预设体一定是加载配置文件过后,然后实例化
1
2
3
4
//第一步:要去加载预设体的资源文件(本质上就是加载配置数据在内存中)
Object obj = Resources.Load("Cube");
//第二步:如果想要在场景上创建预设体一定是加载配置文件过后,然后实例化
Instantiate(obj);

音效资源

1
2
3
4
5
//第一步:加载数据
Object obj3 = Resources.Load("Music/TestMusic"); //如果文件放在某个文件夹内,需要加上路径
//第二步:使用数据 我们不需要实例化 音效切片 我们则需要吧数据赋值到正确的脚本上即可
audioS.clip = obj3 as AudioClip;
audioS.Play();

文本资源

文本资源支持的格式有:.txt、.xml、.bytes、.json、.html、.csv …
注意,如果加载不被支持的格式,会返回null

1
2
3
4
5
TextAsset ta = Resources.Load("txt/test") as TextAsset;
//文本内容
print(ta.text);
//字节数据组
print(ta.bytes);

TextAsset

是Unity的文本资源,包含文本内容和字节数据组等

1
2
3
4
5
TextAsset ta = Resources.Load("txt/test") as TextAsset;
//文本内容
print(ta.text);
//字节数据组
print(ta.bytes);

图片

1
2
3
4
5
6
tex = Resources.Load("Tex/test") as Texture;

private void OnGUI()
{
GUI.DrawTexture(new Rect(0, 0, 100, 100), tex);
}

其他类型

需要什么类型 就用什么类型即可

如果资源重名

Resources.Load加载同名不同类型资源时 无法准确加载出想要的内容,可以使用另外的API

加载指定类型的资源

读取Resources文件夹下的指定名字指定类型的文件,但是仍然返回Unity的Object​,需要自行转换

1
2
3
tex = Resources.Load("Tex/test", typeof(Texture)) as Texture;
ta = Resources.Load("Tex/test", typeof(TextAsset)) as TextAsset;
print(ta.text);

加载指定名字的所有资源

读取Resources文件夹下的指定名字所有类型的文件,返回Unity的Object​数组

1
2
3
4
5
6
7
8
9
10
11
12
13
Object[] objs = Resources.LoadAll("Tex/test");
foreach (Object item in objs)
{
if (item is Texture)
{
tex = Resources.Load("Tex/test", typeof(Texture)) as Texture;
}
else if (item is TextAsset)
{
ta = Resources.Load("Tex/test", typeof(TextAsset)) as TextAsset;
print(ta.text);
}
}

资源同步加载泛型方法

使用了泛型,泛型方法可以让读取返回的值是指定的类型而不再是Unity的Object​,无需转化,同时规避了重名不同类型返回内容不确定的问题
因此实际使用都推荐泛型方法

1
2
3
TextAsset ta2 = Resources.Load<TextAsset>("Tex/test");
print(ta2.text);
tex = Resources.Load<Texture>("Tex/test");