提供一个资源管理和释放的一个方案。
先讨论下cocos creator 的资源概念。
creator 的资源分为两个概念:
一是使用的资源 cc.Asset ,如音效,纹理集等,预制
二是 使用的资源所依赖的,有唯一id的资源,如纹理集依赖png和json两个资源文件,称为原始资源。
这个方案需要保证两件事情:
1, Scene 只作为程序触发入口,以及场景根目录。在scene 上只应该挂载一个脚本,不要依赖任何其他资源。
2, 需要一个资源管理器 模块统一管理游戏中所有的资源。
资源相关的使用和归还只从此模块进入。
原始资源使用唯一id进行引用计数。
资源模块在使用时,在获取后,管理器找到这个资源以及它所依赖的各项唯一资源,进行计数递增。
资源归还时,唯一id的原始资源计数递减。
也就是说,在用户使用是,面对的是prefab这样的资源, 资源管理器释放针对的是原始资源。
对于已经释放的资源,再次需要它时 cc.loader 会重新加载。
通过这种方式,用户可以在需要的是时候触发资源管理器的GC接口,遍历所有原始数据的计数,为0时,使用 cc.loader.release(); 进行释放。