9.1.3 动态加载和释放资源
在本书的实例中,通常使⽤公开变量加拖曳的⽅式引⽤资源,实际上动态加载资源的⽅法适⽤范围更⼴,也⽅便在运⾏时切换不同的资源。
1. 动态加载资源
位于Resources⽂件夹下的资源都可以动态加载。动态加载资源的⽅法主要有Resources.Load()和Resources.LoadAll()两种,前者⽤于加载单个⽂件,⽽后者可以加载⼀个⽂件夹内的所有资源,结果以数组形式返回。值得⼀提的是,重复加载相同的⽂件不会导致⽂件被多次加载,引擎可以判断哪些资源已经被加载过了。
2. 卸载资源
加载的资源会占⽤内存空间,不再使⽤资源的时候应当卸载。卸载⽅法有以下两个。
// 卸载⼀个资源
public static void UnloadAsset(Object assetToUnload);
// ⾃动卸载所有未使⽤的资源
public static AsyncOperation UnloadUnusedAssets();
UnloadAsset()⽅法⽤于强制卸载⼀个资源,不管它是不是正在被使⽤。如果卸载了正在使⽤的资源,则会直接影响当前场景的表现。⽽UnloadUnusedAssets()⽅法会⽤异步⽅法⾃动卸载未被使⽤的资源。但问题是,如果脚本中有⼀个变量正引⽤着某个资源,或是场景中某个忘记销毁的物体引⽤着某个资源,则该资源会因还在使⽤中⽽不会被⾃动卸载。
可以看出,卸载背后隐含的问题要⽐加载多得多,对编程⽅法也提出了更⾼要求。
3. 代码实例
以下⽤⼀段简单的代码演⽰加载和卸载资源的编程⽅法。