写一个打包前的assets映射打包后的assets资源目录脚本

针对creator,目前希望写一个针对打包前(web平台)的assets的目录资源映射打包后的assets对应资源所在路径的一个文本,
比如
打包前:某图片a.png在assets/ui/a.png
打包后:a.png在assets/ui/native/0a/0axxxxxxx.png(不一定存在)
而且在assets/resources/native/0a/0axxxxxxx.png也存在一个
那么脚本中就会有一个
assets/ui/a.png 对应着打包后的这俩个路径的映射json
数据表现为:[assets/ui/a.png] = [assets/ui/native/0a/0axxxxxxx.png,assets/resources/native/0a/0axxxxxxx.png]
希望生成这么一个json文件,这么个脚本主要便于非技术人员用作资源替换查看效果用
目前掌握的资料:
通过源工程.meta能够知道uuid,生成后的文件命名实际也就是这个uuid.后缀的格式,但是目录文件就很迷了,有时候源工程目录下与打包后的目录下不一定一一对应过程路径,
拿上面例子举例:
源工程assets/ui/a.png 打包后是不一定存在assets/ui/native/…
另外就是查看引用的目录问题,
同样是上面例子:assets/ui/… 由于引用依赖会被assets/resources/native/… 目录下存在这个资源
如何查找这些依赖是个问题
虽然在生成文件后可以通过生成的config.json去查看deps字段知道依赖项,但这个还不一定就有你所对应的资源在
综上所述,需要完成通过源工程的资源路径映射打包工程后的资源存在的路径组,如何执行编写这个脚本方案

非技术人员是不允许拉项目到本地测试吗

如果实在确定不了资源被哪个bundle引用了,直接打包好之后去遍历构建后的资源目录不就好了。

这个其实比较简单,先打包,之后执行一个外部脚本,扫描打包前的文件meta获取uuid->原始文件路径,扫描打包后的文件获取打包后文件路径–>uuid。然后连接一下就好了。
关键点是先打包,否则确定不了具体文件会放到哪个bundle哪个路径下。而且不需要做成编辑器插件,直接外部脚本就可以了。

1赞

不好意思想问下具体点作法 :bowing_man:
config.json里面paths就是所有bundle可以读取到的东西吗?
把paths的key遍历过一遍对应回bundle name这样吗?

你可以这样,写一个脚本,例如是nodejs的,输入2个目录路径,一个是打包前的assets目录,另外一个是打包后的assets路径。

1:递归遍历打包前的assets目录下的文件,如果发现后缀名为meta,则用json的格式打开这个meta,找到uuid项,然后保存这个uuid + 这个相对文件路径到一个表a里面。

2:递归遍历打包后的目录下文件,因为cocos的文件都是取的uuid.后缀名的形式,例如40d59b44-f1b0-4e46-9fa8-c6608b6e7753.37584.png,你可以用“.”分割,取到第一段文件名的uuid,把uuid到打包后相对文件路径存到另外一个表b里面。
这里需要一些细节:

  • 如果仅仅替换资源图片文件,我们就只扫描native下的图片文件。
  • 打成图集的文件,是不能直接替换的,所以图集要另外处理。
  • import下面的东西也是比较难替换的,建议只处理native下的。
  • 如果打包后文件,有2个文件一样的uuid和后缀名,就都属于同一个资源,只是因为相同优先级而复制到不同的bundle里面了。那这里就把路径存成列表,后面替换的时候都要替换。

3:链接表a和表b,表a 是 (打包前文件相对路径) --> uuid , 表b 是uuid --> 打包后文件路径。做表a的遍历,拿到表b的值,存成表c(打包前文件相对路径)-> (打包后文件路径).

这样说够清楚了吧。不需要用编辑器的功能,也不用读什么config.json,仅仅读meta和文件名就可以处理了。
这里就是需要先打包,打包完了才有打包后的资源,供脚本处理。

1赞

我这边是通过进入游戏loadDir把某个目录下所有资源拿出来,然后可以看到所有uuid打包后的路径,与uuid一一对应的map格式存下来,生成一个json,然后写个脚本放在打包前的工程,根据目录下的meta文件对应的uuid找到刚才打包后的路径,盖过去 :sweat_smile:

1赞