获得徽章 9
- #每天一个知识点#
2023/07/08
cocos assetManager 资源加载管理
在游戏中,资源的加载管理也是个大问题,没有好好清楚很容易导致各种比如热更新出问题,游戏卡顿的问题等。今天简单说个关于包的问题,首先我们一般会把独立的部门设置为一个包,比如活动/关卡,这样我们可以根据运营的计划,来安排那些被开启加载等。那么设置为bundle。这里面发生什么呢,来说说里面会有的问题:
首先我们的游戏构建之后,一般就是所有资源都被分到内置包( internal / main / resources / start-scene )以及我们设置的单独 bundle 中。
在构造阶段,配置为 bundle 的文件夹就会把文件夹中的资源,以及该文件夹中依赖的其他资源合并到该 bundle 中,文件中的资源会主要被分为三类,代码 / 资源 / 资源配置,放到四个文件夹中(import/ native / config.json / index.js),另一点需要说的是bundle的优先级问题,多个包引用一个资源,如果budle 的优先级都相等,就会把这份资源复制多分,每一个bundle里面都有一份,而要是有一个优先级更高,就会只在优先级高的bundle 保存一份,而其他包引用就会指向该bundle(所以如果低优先的包要使用该资源就需要先加载这个优先级更高的 bundle)
当我们加载 包(bundle)(loadBundle() )的时候,其实并没有把这个包的资源都加载到内存里面,而是只是把 config 以及脚本加入,需要加载资源的时候我们需要 (bundle.load())来载入我们需要的资源。这里也就是我们经常一进游戏卡顿的问题,因为一进入游戏,大量的资源进行 load,导致高额IO压力。(我们现在的处理是对所有该该操作做队列处理,避免一次性同时加载).高IO在网页调试中中能看到比较明显,但相反在手机上问题更大的是 包的下载花费的时间,所以cocos 提供预加载,我们可以先下载必须的部分,而在后面缓慢下载其他资源。
资源加载后当然也需要释放,引擎也有对该部分的处理,包含计数释放,静态资源和动态资源的处理等,以及我们主动释放,另外加载进入内存的资源不会被主动释放,也会导致内存越来越大等问题展开314
![[呲牙]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_2.cd1e2bd.png)