CocosCreator之AssetBundle使用方案分享 (2)

资源管理器 ResLoader
负责加载资源

image.png

资源项: ResItem 负责管理资源的引用计数

image.png

ResHelper
为了跨引擎使用ResLoader,我自定义了ResType枚举、ResInterface 接口和这个Creator加载辅助类ResHelper,如果不涉及到跨引擎的话,可以去掉这几个东西,然后直接把AssetBundle传到ResLoader中使用。

image.png

使用

将一个模块的资源放入一个目录中,将这个目录设置为Bundle

image.png

在ModuleManger中设置bundle的名字

image.png

点击进入时或者在loading的时候设置对应模块的Bundle

image.png

进入模块之前设置为此模块对应的模块ID,那么此时获得的ResLoader 自然就是battle模块的ResLoader了,并且ResLoader使用的Bundle 是名称为 battle 的Bunlde。

image.png

清理资源,这里需要指定模块ID。由于引擎做了资源引用计数的事情,所以我们不用再去管理依赖关系,省了很多事情。

image.png

注意事项

如果是resource中的资源作为bundle之后,需要从resource中拿到外边。

image.png

发布小游戏时压缩类型设置为小游戏子包,官方文档已说明

image.png

资源管理的一些问题

看到论坛对于2.4的引用计数问题讨论的非常激烈。
https://forum.cocos.org/t/2-4-0/95076/32
我做的资源管理器有如下规则

所有资源必须通过资源项ResItem的getRes接口获得,保证使用一次计数增加一次,不参与引擎提供的计数管理。由于引擎自己管理的依赖关系,所以2.4之后不再需要维护资源的依赖关系。只维护好自己的使用次数就好。

image.png


image.png

ResLoader 提供删除某个资源的功能,应对ui清理需求。如果删除整个模块,调用release 接口即可。

image.png

ResLoader 支持直接缓存一个挂载到场景中的资源,比如初始场景会直接挂载一个预制体,避免黑屏。如果不想清理场景只想清理这个预制体就可以这样使用。

image.png


image.png


image.png

实际应用可能复杂的多,每个人的用法不同,不保证没有问题。

结语

以上各种方案仅是我个人的使用方式,并非最佳方案,可能会有bug,仅供大家参考,谁有更好的方式,也分享出来,互相学习。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgfyz.html