Unity开发实战探讨-资源的加载释放最佳策略简要心得

Unity开发实战探讨-资源的加载释放最佳策略简要心得

看过我另一篇关于Unity资源释放随笔《Unity开发实战探讨-资源的加载释放最佳策略》若是以为略微复杂,那么下面是一些比较简要的心得体会:缓存

归纳

经常使用资源加载的方法有三种:静态,Resources内部资源,AssetBundle外部资源网络

资源释放的方式 有二种:马上释放和统一释放。函数

静态

静态就是资源直接放场景,静态资源没法马上释放,但场景关闭由引擎统一释放,开发者没法干预,因此最为无脑。对象

但静态过于死板,除了整个场景生命周期中必须使用的资源外,不建议静态加载,为何,消耗时间,占用内存;好比说,游戏场景持续使用的背景音乐,那么静态的确是最佳选择;但若是场景的开场要播放一个5M的音乐后面再也不使用,这个资源用静态就是白白增长了5M音乐的加载时间和浪费了5M内存,得不偿失。生命周期

静态资源的加载策略是: 只加载必要固定的资源,或者极其微小损耗不大的资源。游戏

释放策略是:由引擎负责。图片

Resources内部资源

Resources的资源通常和游戏一块儿打包,通常是游戏内使用的关键资源。内存

Resources主要加载一些动态的或者须要灵活处理的资源。加载的办法是先Reources.Load,而后GameObject.Instantiate,马上释放的办法是Reources.UnloadAsset,统一释放的办法是Resources.UnloadUnusedAssets。资源

Resources的主要优势是使用灵活,缺点是开发复杂;加载的时候注意一个资源只须要Reources.Load一次,管理好Load出来资源的引用,尽可能不要用静态引用,给释放制造困难。UnloadUnusedAssets前必须注意释放全部引用,全部Instantiate出来的对象必须销毁。开发

Resources的加载释放策略是: 只加载必须使用的资源,加载之后若是无需重复使用,或者使用频率很是的低,应该在明确使用完毕之后(如图片显示结束,音乐播放完毕)马上用Reources.UnloadAsset释放。对于后续仍然会反复采用的资源,建议在内存中缓存引用,以防止后续加载再也不反复调用Load函数,场景关闭前释放缓存,销毁全部实例化对象,等待Resources.UnloadUnusedAssets统一释放。UnloadUnusedAssets释放建议在当前场景彻底销毁之后,再后续场景中执行最为稳妥。

AssetBundle外部资源

 AssetBundle资源的机制基本和Resources相似,但能够独立打包,支持网络下载和文件读取,通常是游戏中使用的辅助资源。

 AssetBundle机制要比Resources多一步,首先要经过AssetBundle.LoadFromXXX把AssetBundle加载到内存,而后使用AssetBundle.LoadAsset加载资源,最后GameObject.Instantiate为实例化对象。因此一个完整实例化的 AssetBundle存在三处内存引用,在释放策略上相对复杂。

 AssetBundle的释放功能主要经过AssetBundle.Unload,并且也可使用Reources.UnloadAsset和Resources.UnloadUnusedAssets进行释放。

 AssetBundle的加载释放策略分两种状况:

加载完毕之后再也不须要使用的资源包,能够再加载完毕之后马上调用AssetBundle.Unload(false)释放资源包内存,而在此基础上,对于AssetBundle.LoadAsset之后并再也不使用的资源,能够经过Reources.UnloadAsset释放,如需持续使用,也可能等待Resources.UnloadUnusedAssets后续统一释放。

加载完毕之后仍需持续使用的资源包,则必须保留AssetBundle引用,这种方式下,比较建议的方式是在场景彻底销毁之后,一次性调用AssetBundle.Unload(true)彻底释放改资源包和其全部加载资源。

相关文章
相关标签/搜索