大家的资源管理系统都是怎么设计的?

从开始接触了解到资源管理开始就一直为这个东西纠结。工作接手的项目里资源管理总是一塌糊涂。想问问大家对资源管理都有什么经验。
我个人的想法是这样的,一个比较完善的资源管理系统,可以通过给资源进行分组,通过当前需要的资源组来加载可能要用到的资源。
比如现在在a界面,并且随时可能打开b界面,那么需要a/b界面的资源存在,其余资源都可以释放掉。
这样管理可以让立即需要使用到的资源都在内存中,同时也能释放掉所有不必要的资源。

还有一种设计是比较动态的,将所有资源加上一个标记,比如说定义为热度,资源如果处于未使用状态,热度会随着时间降低。
资源量到达一定阈值,就会从资源池中将热度低的资源释放掉。

资源管理,主要是看管理的粒度,是以单个资源为单位还是以组(或者Bundle为单位)。我建议以逻辑组为单位,并且根据逻辑组来分bundle。
加载这块,就比较简单,能根据统一资源路径 db://assets/… 来查找到需要哪个bundle,请求一个资源路径的时候,进行bundle -> asset 的两段加载就可以了。
关键就是卸载这块,我这边是根据bundle做引用计数和超时机制。一般我们使用bundle进行分组,一个bundle一个组,一个组=一个逻辑上的资源包(一个界面,一个模型(带动画),一个特效)。然后在逻辑上给bundle进行引用计数,引用计数归0以后就走超时卸载。另外在分组的时候,会有一些公共组,这种组就是仅加载不卸载的,而且要预加载。另外卸载有一些细节问题,例如和对象池或者ui cache的关联,这个就具体来看了。
编辑:另外还有cocos 的机制需要注意,cocos的bundle release 会越界删掉依赖bundle内的资源,需要改一下引擎限制一下范围。

1赞

记得对齐下颗粒度 :rofl:

好好好,到deathline前会复盘一下的 :speak_no_evil: