自动图集的构建产物的文件id,如何与原始图集meta文件关联

  • Creator 版本: 2.4.7

  • 目标平台: ios/android

    问题: 一般文件的构建产物的文件名都是其原始文件的uuid,但是自动图集会构建多张png,想知道多张png的文件名如何跟其原始配置的meta文件相关联?

    问题背景:现有我们的开发流程是,先构建,再通过脚本执行压缩纹理。在进行压缩纹理构建的过程中,我们发现,我们项目存在相当一部分没有透明度的图片,如果把不存在透明度的图片的alpha通道在压缩纹理中去掉,可以大大优化我们的内存

    解决思路:

    1. 扫描图片,如果没有透明度,则采用 etc2 RGB 方式生成压缩纹理,去掉alpha通道。

    2. 自动图集的产物一般情况下都会包含透明度,但是这里单个的图片都没有透明度

    3. 所以,通过拓展自动图集的配置项,人工勾选是否有透明度,如果没有透明度,则在构建结束后,生成压缩纹理的时候,去掉alpha通道(etc2 RGB),否则就是etc2 RGBA。

    4. 这里,一般文件的构建产物的文件名都是其原始文件的uuid,但是自动图集会构建出多张png,这几张png的文件名如何跟其原始配置的meta文件相关联?

@jareguo 求解答

up up up

参考一下 定制项目构建模板 · Cocos Creator
能通过 getNativeAssetPath 拿到构建后的图集位置。

可是,我是需要对应关系,就是自动图集里meta文件里的uuid怎么跟构建产物对应起来呢?
getNativeAssetPath是需要uuid的,但是自动图集构建产物的uuid是怎么生成的呢?看起来跟原始meta文件不是一个

没办法这样对应,因为构建后不存在 pac 文件对应的资源。构建后只有一张图、一堆 SpriteFrame。不存在图集对象,因为引擎和游戏用不到这个对象。
只有 plist 才会有图集对象,自动图集是没有的。
不清楚具体需求是什么,不过你的需求应该是可以用其他方式实现的。

具体的需求是

  1. 通过 人工检配置是否保留自动图集的alpha通道。
  2. 在构建完之后,生成压缩纹理的时候,统一去掉。但是又不是所有的自动图集都是需要去掉alpha通道的。

生成压缩纹理的阶段在构建结束后,目的是使用脚本多进程处理,提高速度。

遍历项目里的自动图集,获取旗下所有图片,判断是否要保留 alpha,并且通过上面提供的构建 API 就能拿到合并后的大图进行构建后的处理。

上面提供的构建api,需要传入uuid。
可是如果配置了自动图集,原始图片构建后,通过getNativeAssetPath,传入原始图片里的uuid查不到合并后的大图的链接。
没有配置自动图集的图片,能查询到构建后的链接

已有解决办法:感谢 @jare 解答
参考:定制项目构建流程

  1. 遍历目录下所有的自动图集pac,获取其下所有图片
  2. 通过 图片的meta文件里的 subMetas[name].uuid (name即为图片的名字),通过buildResults.getDependencies 查找对应的构建产物的uuid
  3. 通过构建产物的uuid, getNativeAssetPath 获取 nativeUrl
  4. 进行其他处理

无法获取自动图集的图片啊