自动合图不打包在运行时不起效果的修复方案

简介

这是一个基于cocos creator 自动图集生成的预览效果图的修复方案,为了解决不打包直接运行时看不到合图drawcall效果的问题。

注意

每次更新都需要点击预览,更新creator生成的合图。

这是基于预览效果的合图,仅供参考,不代表最终打包效果。因为打包的一些过滤选项在预览时不会生效,导致合图会变大,包含一些其他图片。

每个场景都引用至少一次图集,Sprite上引用即可。

使用方法

每次运行前,先预览自动合图,然后右键点击自动合图资源,选择刷新自动图集,然后再运行,就会生效。

技术实现

遍历项中自动合图的资源,将其uuid添加到在library中缓存的自动合图的信息中,这样,在项目中加载自动合图,就会加载这些SpriteFrame。

接着插件会自动创建 一个名为 auto_atlas_temp 的 bundle ,并将 temp 目录中生成的预览效果图和信息复制到 auto_atlas_temp/atlas 目录下,然后更新AutoAtlasPatch.ts中保存的uuid。

AutoAtlasPatch.ts 是插件自动生成的代码,添加了一个管道到creator的pipeline中,加载atlas中存储的图片信息,并处理SpriteAtlas和SpriteFrame的数据关系。

在打包前,会备份并删除auto_atlas_temp,在打包结束后,会恢复auto_atlas_temp,以保证不会影响到打包。备份在auto_atlas_temp_dir目录下。

下载地址:https://github.com/yuniao777/auto_atlas_refresh

太赞了!!!实用

如果有过滤需求,可以自己在main.ts里执行refreshPac方法前,删除需要过滤的资源,然后刷新assets database,通过uuid找到并删除creator 的 temp文件夹里面原来的预览缓存。
设置个定时器,检查是否生成新的缓存(pac-info.json文件里面存有生成的图片信息,检查这些图片是否都存在即可判断是否生成完成)。
当点击预览生成新的缓存文件后,再执行refreshPac,当refreshPac方法执行完之后,再将原来删除的过滤文件复原即可。

mark :+1:

我觉得可以直接在插件package.json -> contributions-> asset-db -> mount ,打包前只用改一下配置就可以了。image
参考文档