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)完全释放改资源包和其所有加载资源。

Unity开发实战探讨-资源的加载释放最佳策略简要心得的更多相关文章

  1. Unity开发实战探讨-资源的加载释放最佳策略

    注:本文中用到的大部分术语和函数都是Unity中比较基本的概念,所以本文只是直接引用,不再详细解释各种概念的具体内容,若要深入了解,请查阅相关资料. Unity的资源陷阱 游戏资源的加载和释放导致的内 ...

  2. 在Unity3D的网络游戏中实现资源动态加载

    用Unity3D制作基于web的网络游戏,不可避免的会用到一个技术-资源动态加载.比如想加载一个大场景的资源,不应该在游戏的开始让用户长时间等待全部资源的加载完毕.应该优先加载用户附近的场景资源,在游 ...

  3. AssetBundle系列——资源的加载、简易的资源管理器

    每个需要进行资源管理的类都继承自IAssetManager,该类维护它所使用到的所有资源的一个资源列表.并且每个资源管理类可以重写其资源引用接口和解引用接口. 每个管理器有自己的管理策略,比如Scen ...

  4. unity3d进行脚本资源打包加载

    原地址:http://www.cnblogs.com/hisiqi/p/3204752.html 本文记录如何通过unity3d进行脚本资源打包加载 1.创建TestDll.cs文件 public c ...

  5. 关于cocos2d-x 与 cocos2d-html5 资源预加载的思考

    移动端资源预加载,可以做到需要加载的时候,从本地磁盘加载到内存,当纹理不需要的时候,都是强制清理内存里的纹理占用: cc.TextureCache.getInstance().removeAllTex ...

  6. 资源预加载 Preload

    当提到前端性能优化时,我们首先会联想到文件的合并.压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更快,用户可以尽快使用我们的 Web 应用来达到他们的目标. 资源预加载 是另一个性能 ...

  7. (转)在Unity3D的网络游戏中实现资源动态加载

    原文:http://zijan.iteye.com/blog/911102 用Unity3D制作基于web的网络游戏,不可避免的会用到一个技术-资源动态加载.比如想加载一个大场景的资源,不应该在游戏的 ...

  8. Spring中资源的加载原来是这么一回事啊!

    1. 简介 在JDK中 java.net.URL 适用于加载资源的类,但是 URL 的实现类都是访问网络资源的,并没有可以从类路径或者相对路径获取文件及 ServletContext , 虽然可以通过 ...

  9. VC++ 使用WebBrowser控件中html文件以资源形式加载

    . . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...

随机推荐

  1. C语言程序设计100例之(7):级数求和

    例7    级数求和 题目描述 已知: Sn =1+1/2+1/3+…+1/n.显然对于任意一个整数 k,当 n 足够大的时候,Sn>k. 现给出一个整数 k,要求计算出一个最小的 n,使得 S ...

  2. 【文本处理命令】之sed命令详解

    sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...

  3. 12-UA池和代理池

    一.UA池和代理池 1.UA池                                      scrapy的下载中间件: 下载中间件(Downloader Middlewares) 位于s ...

  4. 安装 Java

    1.rpm下载地址 https://download.oracle.com/otn/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm?AuthParam=1570520 ...

  5. java基础(9):类、封装

    1. 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. 例 ...

  6. Python爬取知乎单个问题下的回答

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 努力学习的渣渣哦 PS:如有需要Python学习资料的小伙伴可以加 ...

  7. Spring MVC接口实例

    概述 前文记录了MVC模式和Spring MVC的初步认识,现在记录创建一个项目,配置Spring MVC,编写接口程序. 创建项目 打开IntelliJ IDEA,点击"File-> ...

  8. Git笔记----Git仓库常见经典操作命令

    首次创建仓库上传项目操作在上一篇https://www.cnblogs.com/tk55/p/11795644.html ----好记性不如烂笔头 再次更新到仓库 不是首次更新内容或文件到远程仓库 g ...

  9. 一则SQL优化案例

    原始sql: select CASE ) counts ,) else deadline end as deadline from t_product_credit) c group by sort ...

  10. 将vue2.9.6升级到vue3.0

    vue2.9.6没有ui界面可以用,直接使用yarn global add @cli没用,还是2.9.6版本 借鉴博客: https://juejin.im/post/5bf7d67c51882518 ...