资源加载是游戏中非常重要也非常繁琐的的一部分,不合理的资源管理,必定回给游戏的内存带来非常大的压力,尤其是一些重度游戏,不但资源特别多,引用关系特别复杂。维护一个不会内存泄漏而且加载效率高的资源加载框架,真的非常非常的不容易。项目前期不容易暴露问题,项目后期问题又难查,而且难改~以下内容是结合了自己参与的项目,还有网上很多大佬观点的一个总结。

编辑器下建立资源关系,并导出资源关系序列化文件

首先构建一个序列化文件存储类,大致如下:

然后对项目资源进行分类,思考出来一套符合自己项目的打包策略,然后对资源文件建立资源引用关系,导出序列化二进制文件。

打包策略,可以参考之前的一篇文章思路:马鑫:Unity游戏开发笔记-资源管理之资源打包策略​zhuanlan.zhihu.com

游戏运行,反序列化出资源关系文件,游戏中维护一份资源关系文件

首先建立资源类的基础Class,这个类非常重要,游戏中我们最终将核心管理这个类,资源加载实际上使用的也是这个类。大致如下:

游戏中通常都会有ResourceManager和AssetBundleManager这里我们对职责做一个简单的划分,大致如下:

维护资源池

首先,这里先思考以下资源管理的方法,我们这里使用双向链表,根据引用次数和使用时间做维护的标准,对回收的资源做资源池的管理,大体思路如下:

整理清楚了以上思路,我们这里用一个简单的流程图来理一下整个流程:

Emmm通过上面这张图,大家明显可以看出来

我 不 会 画 流 程 图

然后开始介绍几个核心的Manager的功能:

AssetBundleManager负责编辑器下生成的依赖数据的管理

负责加载资源的时候资源Ab和依赖项的加载

负责资源卸载的时候资源Ab和依赖Ab的卸载

划重点加载资源Ab的时候,一定要先加载依赖项

卸载资源Ab的时候也要卸载引用计数为0的Ab,引用计数的管理比较重要。Emm

ResourceManager正如其名,负责资源文件的同步加载,异步加载,预加载。这里我们只负责把文件加载到内存中,实例化的操作由ObjectManager负责。

负责对加载过的资源做资源缓存

对卸载的资源做回收资源的管理

对ObjectManager的分装类对象做二次处理赋值,因为从加载对象还是要用ResManager来加载。

异步加载的管理,维护按照优先级排序的异步加载列表。

异步加载的取消

划重点设计到的中间传递类较多,不好管理

小心处理每一个函数,不恰当的管理很容易内存泄漏

类对象池和资源池对象回收的重置处理

异步分帧的尺度把握

池大小的尺度把握

ObjectManager主要负责需要实例化的Gamobject资源的同步加载,异步加载和预加载。

负责对已经加载资源做池管理

代码不贴了~

资源管理相关的文章基本就到此结束了~

总而言之,不亲手写一套资源管理的代码,你永远不会知道,有多少坑在等着你。

预告:

下次更新游戏中必备的UIManager,我这里会对Cs和Lua都做一个封装。

嗯,该休息了。

unity 通过resouce加载图片_Unity游戏开发笔记-资源管理之资源加载相关推荐

  1. 【从零开始游戏开发】Unity3D AssetBundle资源加载和封装 | 全面总结 | 建议收藏

    你知道的越多,你不知道的越多

  2. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...

  3. 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类

    本系列文章由zhmxy555编写,转载请注明出处. http://qianmo.blog.51cto.com/5127279/875711 作者:毛星云 邮箱: happylifemxy@qq.com ...

  4. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器 DirectInput专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  5. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界 光照与材质专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  7. 【Visual C++】游戏开发笔记三十三 浅墨DirectX提高班之二 化腐朽为神奇:DirectX初始化四步曲

    这篇文章里,我们将迈出精通DirectX的第一步,先了解典型Direct3D程序的书写流程,然后学习COM接口的对象的一些思想,然后按照"四步曲"的思路,系统地学习DirectX的 ...

  8. 【Visual C++】游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法

    本系列文章由zhmxy555编写,转载请注明出处.  http://blog.csdn.net/zhmxy555/article/details/7338082 作者:毛星云    邮箱: happy ...

  9. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8547531 作者:毛星云(浅墨) ...

最新文章

  1. Union和Union All的区别
  2. ESP32彩屏开发板(WT32-SC01),除了买买买,你还可以参与一起设计了
  3. OpenCV离焦去模糊滤镜
  4. java中四类八中_JAVA中的八中基本数据类型
  5. PDF Bookmark Extract1.0 release(Free Version) PDF书签抽取器(iTextSharp的利用)
  6. Position与localPosition的区别
  7. Spring之后处理器
  8. 音乐直链php,【原创】百度音乐直链 + 实现方法
  9. C语言入门教程(一)
  10. 高频面试之Eureka
  11. VMware ESXi 7.0 U2 SLIC Unlocker USB 网卡驱动集成镜像 202109 更新
  12. 万物皆为叠加态粒子:如何用量子物理学诠释生活?
  13. 一种简单的图像白平衡计算方法
  14. 今天的骑行路线。。。
  15. lol封号维护服务器,LOL手游:各大服务器突然断开,众主播账号被永久封停
  16. 第一章、linux入门及基本命令(案例讲解)
  17. ubuntu下搭建不同端口网站
  18. PhotoScan:为冲印的照片拍摄无眩光照片
  19. Excel从手机号和座机号混合文本中提取手机号码
  20. SQL 中国人--ZGR

热门文章

  1. Java·Lambda
  2. oracle查询多表连接语句怎么写,Oracle join多表查询
  3. AndroidStudio删除无用资源
  4. 微信朋友圈点赞用例设计
  5. 微波无线电通信天线的种类
  6. c语言中int的取值范围是怎么算出来的,int的取值范围怎么算
  7. 424 B. Megacity
  8. 003.西门子M440变频器段子控制三种停车方式
  9. 海盗派测试分析MFQPPDCS
  10. 快手/快手小店滑块验证码逆向分析