(一)最近整理资源加载和卸载,梳理了下思路画了自认为的流程图
本框架中共3块组成:对象池,资源池(AssetBundle加载出的Asset的中间管理类),AssetBundleManager(这块主要是打包的时候已经决定配置好了各个Asset间的依赖关系,与此文的关系不大,后面整理一键打包再细说)
1.同步加载关于Instantiate的小解释:
你 Instaniate一个Prefab,是一个对Assets进行Clone(复制)+引用结合的过程,GameObject transform
是Clone是新生成的。其他mesh / texture / material / shader等,这其中些是纯引用的关系的,包括:Texture和TerrainData,还有引用和复制同时存在的,包括:Mesh/material/PhysicMaterial。引用的Asset对象不会被复制,只是一个简单的指针指向已经Load的Asset对象。这种含糊的引用加克隆的混合,大概是搞糊涂大多数人的主要原因。
2.卸载
3.异步加载
详细解释如下:
AssetBundleManager
负责编辑器下生成的依赖数据的管理负责加载资源的时候资源Ab和依赖项的加载负责资源卸载的时候资源Ab和依赖Ab的卸载
划重点
加载资源Ab的时候,一定要先加载依赖项卸载资源Ab的时候也要卸载引用计数为0的Ab,引用计数的管理比较重要。Emm
ResourceManager
正如其名,负责资源文件的同步加载,异步加载,预加载。这里我们只负责把文件加载到内存中,实例化的操作由ObjectManager负责。负责对加载过的资源做资源缓存对卸载的资源做回收资源的管理对ObjectManager的分装类对象做二次处理赋值,因为从加载对象还是要用ResManager来加载。异步加载的管理,维护按照优先级排序的异步加载列表。异步加载的取消
划重点
设计到的中间传递类较多,不好管理小心处理每一个函数,不恰当的管理很容易内存泄漏类对象池和资源池对象回收的重置处理异步分帧的尺度把握池大小的尺度把握
ObjectManager
主要负责需要实例化的Gamobject资源的同步加载,异步加载和预加载。负责对已经加载资源做池管理
下面附上框架测试代码:
切记自己动手调试,多思考总结
链接: https://pan.baidu.com/s/1B7L5aj4e2jj-Bgfl4pzB8A 提取码: 7wai