这种情况下,自动图集是否形同虚设?

既想要合并drawcall,又想动态读取图片。这个时候自动图集该如何使用?

3.0以前,我们是这样用的。
碎图放在resources或assetbundle下,在需要打包的目录新建一个自动图集配置。这样动态加载图片时,就直接加载碎图。打包出来后,合并成图集,drawcall也合并了。对开发者来说是透明的,非常好用。

3.0以后,如果自动图集放在resources或assetbundle下,会提示

论坛上也有这个疑问的帖子:大佬们帮看下3.0 AssetBundle自动图集问题

按照官方的回复,应该是以后的设计都要求移出文件夹外,于是就有了以下的解决方案:
我们新建一个prefab,引用我们的自动图集(文件夹外)。该prefab上挂载一个脚本,实现从引用的图集中获取某个spriteFrame。

这个解决方案,可以解决打包出来的情况。但是在开发期预览的时候,自动图集没有实际生成图集,所以引用里面的spriteFrame是空的,所以无法获取。

那么要怎么实现开发期也能使用呢?
.

这只是一个警告,预警这样会增大包体可能带来预期之外的效果,如果你是明确知道自己的处理带来的效果,那么就可以忽略。

3.0以前,我们是这样用的

现在的处理并没有修改之前用法的逻辑,仅仅只是加了警告提示。如果是不能,那么我们会报错。

3.0之前是不会生成两份资源,因此没有增大包体。
而增大包体这件事本来就是很难接受的,特别是小游戏,对包体大小就更敏感了。

3.0 之前和 3.0 之后 bundle 的设计和实现都是同一个人,并没有发生什么用法设计上的变化。你说的不会生成两份资源的是哪个版本?是放在 Bundle 下的图集?

之前使用的是2.4.3版本,不是在assetbundle,是在resources下。
我弄了个很简单的demo
AutoAtlas2.4.3.zip (906.7 KB)
AutoAtlas3.0rc.zip (1.2 MB)

两者打包成微信小游戏分别如下:
2.4.3:

3.0.0:

不好意思,了解了一下,目前这个差异是内部多方原因造成的, 3.0 上对 sprite texture 的组织结构做了调整,同时之前 2.x 有针对纯 2D 项目做了一些打包的静默优化处理,这个自动图集资源处理就是其中一项。

3.1 会优化这部分相关功能的使用,短期内确实只能先通过更改资源放置位置的方式来达到预期:自动图集不放在 Bundle 下,通过依赖关系让构建自动打包资源就不会产生多余文件。放在 Bundle 就是默认每个资源都可能被动态加载,都会打包。

好的,那只能期待3.1了

已修复,感谢你的反馈