Resources.Load和Asset

Resources.Load 加载Resources文件夹里指定路径的asset
AssetBundle 支持通过WWW类来使用流式的assets
Resources.Load从一个默认打进游戏包里的AssetBundle加载资源,而AssetBundle的方式是自己创建、管理AssetBundle文件并从中加载资源,两者本质上没有区别。

AssetBundle的加载:
CreateFromFile从硬盘加载一个AssetBundle文件
CreateFromMemory异步从内存数据创建一个AssetBundle
CreateFromMemoryImmediate同步从内存数据创建一个AssetBundle
AssetBundle加载完毕后只是在内存里创建了AssetBundle的数据结构,此时还没有assets的概念。

Assets的加载:
AssetBundle.Load等加载asset的方法才会从AssetBundle中创建一个asset,这里面可能包括了GameObject、Transform、Texture、Mesh、Material、Shader等各种资源。
当使用asset(prefab) Instantiate出一个对象时,是对这个asset进行复制(clone)加引用的过程:
GameObject、Transform是复制出来的;
Texture、TerrainData是引用原asset的;
Mesh、Material是复制和引用同时存在的。
因此这里需要注意:当Instantiate出的对象未Destory前不能卸载它引用的asset,而当对象Destory后需要通过Resources.UnloadUnusedAssets来释放不再引用的asset。

AssetBundle的卸载:
public void Unload(bool unloadAllLoadedObjects);
unloadAllLoadedObjects为true时将卸载AsserBundle的同时会卸载从AssetBundle中加载出来的assets,如果此时还有对象引用着这些assets时会不安全。
unloadAllLoadedObjects为false时只会卸载AssetBundle,要卸载从AssetBundle中加载出来的assets时需要在合适的时机调用Resources.UnloadUnusedAssets。

http://game.ceeger.com/forum/read.php?tid=4394

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据