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. Ubuntu 16.04 + Realsense D435i + ROS 环境配置

    参考: [1] Realsense-Ros: https://github.com/IntelRealSense/realsense-ros#installation-instructions [2] ...

  2. Sublime和VSCode生成基础HTML代码

    我们在编写前端页面时,常希望能自动生成基础的HTML代码.而在Sublime和VSCode就有这样的功能 在Sublime中,在编辑栏输入html,然后敲Tab键,则自动生成代码如下: <!DO ...

  3. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 3

    23.2  接口实现的基础 大家都很了解函数在本地应用,通过名称调用函数执行,并通过传递不同参数,函数有不同执行,执行后给调用者返回结果.如果把一个函数做成一个接口远程访问,也需要这几个步骤.使用HT ...

  4. 【Linux命令】文本文件编辑命令10个(cat、more、less、head、tail、tr、wc、stat、cut、diff)

    目录 cat查看文档 more可分页查看文档 less相比较more功能更强大 head查看文档的前N行 tail查看文档的后N行或试试刷新查看 tr替换文本字符 wc统计文本行数 stat查看文档存 ...

  5. 【raid级别】RAID级别工作模式

    友情链接 磁盘分区,格式化,挂载,创建交换分区:https://www.cnblogs.com/HeiDi-BoKe/p/11936998.html RAID工作级别:https://www.cnbl ...

  6. PyCharm 2017: Remote debugging using remote interpreter doesn't work

    I set up a remote interpreter and verified that I can run a script using the remote interpreter. Con ...

  7. 2018-8-10-win10-uwp-商业游戏-

    原文:2018-8-10-win10-uwp-商业游戏- title author date CreateTime categories win10 uwp 商业游戏 lindexi 2018-08- ...

  8. WPF图片,DataGrid等实现圆角

    <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.Ro ...

  9. 机器学习实战:基于Scikit-Learn和TensorFlow 读书笔记 第6章 决策树

    数据挖掘作业,要实现决策树,现记录学习过程 win10系统,Python 3.7.0 构建一个决策树,在鸢尾花数据集上训练一个DecisionTreeClassifier: from sklearn. ...

  10. 反射DataTable转实体类

    using System; using System.Collections.Generic; using System.Data; using System.Reflection; namespac ...