感谢@ForeverZi提供的技术支持

环境

引擎:Cocos Creator 2.0.9
系统:MacOS 10.14.2

起因

当前团队在做的这款小游戏包体较大,需要把资源放到远程来加载,
但是引擎升级到2.X后,引擎将资源做了一次混淆,导致特定的素材
无法取出并上传到服务器

然后在google上搜了一下大家的解决方案,大部分的解决方案都是1.X版本的,微信开发者工具工程上的结构名还是可以读懂的

-w400

升级到2.X微信工程上的目录结构大概长这个样子

资源分配思路

通过观察生成的文件,2.X在res下创建了两个文件夹,import文件夹
下都是json文件,而raw-assets文件夹下全是图片,而图片名是cocos
项目中.mata文件中的uuid,文件夹名是uuid的前两个字符

我们可以按照下面的规则来进行资源的管理

在res和resources文件夹下分别创建index文件夹,这个文件夹只放
微信4M需要的图片素材,通过cocos build之后,记录下这两个文件夹
下的UUID,通过这个UUID区分哪些在微信工程上该删,哪些不该删

具体实现

项目结构

我们的项目结构是下面这张图,不一样可以自行看代码修改

读取UUID

通过 jq 读取mata文件并将UUID存到UUID.txt中

#!/bin/bash

: > UUID.txt

collectPngUUID(){
    local fileList=`find ${1} -name *.png.meta`;
    for filePath in $fileList; do
        uuid=`cat $filePath | jq ".uuid" | tr -d '"'`;
        echo /${uuid:0:2}/$uuid.png >> UUID.txt;
    done
}

collectPngUUID "../assets/res/index";

非4M资源删除

根据UUID.txt建立对应的文件夹,然后从微信工程res里将所有4M 的图片资源都存在deploy/copy/中,接着删除微信工程res/raw-assets 中的所有内容,并将deploy/copy/复制到微信工程中

rm -rf copy;
cat UUID.txt | xargs -I{} dirname {} | xargs -I{} mkdir -p copy/{};
cat UUID.txt | xargs -I{} cp ../build/wechatgame/res/{} copy/{};

cd "../build/wechatgame/res";

rm -rf raw-assets;

cd "../../../deploy";
cp -rf copy/ ../build/wechatgame/res/

遇到的问题

当我们代码写到这里时,在模拟器上运行一顿报错,后来发现主场景中引用了
几个cocos默认的贴图导致游戏运行时没有找到,这些文件存在temp文件夹下

分析一下temp文件夹下所有的png资源然后按照上面的流程运行一遍即可

collectPngUUID "../temp/internal/image";

What doesn’t kill you makes you stronger.