在unity中,一般声音、预制体、材质以及其他各种资源的加载都可以使用拖拽的方式,在组件界面里把资源拖进去即可。但是有时我们也会想要在脚本中加载资源,或者对资源进行统一管理,这时候我们就可以使用Unity提供的资源加载函数——Resources.Load
。
加载资源(返回一个泛型对象):var 变量= Resources.Load<T>("Resources文件夹下的文件路径");
使用注意:
- 使用这种方式加载资源文件时,首先需要在Asset目录下创建一个名为Resources的文件夹(可以不在一级目录,二级目录也可以),所有资源文件都放在该文件夹下,命令中的路径从
Resources
文件夹处开始写。 - 用 “
/
”表示子文件夹。 - 读取的文件不要加文件的后缀。
Load
后<>
中写入读取的类型。
举个例子,如果我们想要读取音频文件 Assets/Resources/Music/1.wav
,调用方法为:
string fileName = "Music/1";
AudioClip clip = Resources.Load<AudioClip>(fileName);
或者想要加载预制体Assets/Game/Resources/Prefabs/2.prefab,调用方法为
:
string fileName = "Prefabs/2";
GameObject gameobject = Resources.Load(fileName) as GameObject;
通常,我们可以将资源路径新建一个单独的静态类,单独存储,这样就可以在所有脚本中调用它了,如:
public static class MyConst
{
public const string RESOURCES_PATH = "Prefabs/Bullet";
public const string RESOURCES_ASTEROID01_PATH = "Prefabs/Asteroid_01";
public const string RESOURCES_ASTEROID02_PATH = "Prefabs/Asteroid_02";
public const string RESOURCES_ASTEROID03_PATH = "Prefabs/Asteroid_03";
public const string RESOURCES_ENEMY_PATH = "Prefabs/Enemy";
public const string RESOURCES_BULLET_ENEMY_PATH = "Prefabs/Bullet_Enemy";
}
这样我们在其他脚本中直接调用该类中的字符串常量即可加载资源,在日后看代码的时候也比较好通过字符串常量的命名知道加载的资源是什么:
GameObject enemy;
private void Awake()
{
enemy = Resources.Load(MyConst.RESOURCES_ENEMY_PATH) as GameObject;
}