如上图,我在此文件夹加了自动图集文件
实际构建成功后此图集的描述文件及资源文件命名却是如下图:
自动图集meta uuid:a390210c-7317-453f-b0a2-824c33003eca
求答疑:
图集Json命名:0dccb1cb0
资源命名:1dccb1cb0
这两个命名,是如何生成的
如上图,我在此文件夹加了自动图集文件
实际构建成功后此图集的描述文件及资源文件命名却是如下图:
自动图集meta uuid:a390210c-7317-453f-b0a2-824c33003eca
求答疑:
图集Json命名:0dccb1cb0
资源命名:1dccb1cb0
这两个命名,是如何生成的
自动图集,由于一个 pac 配置有可能生成多张图,所以不是用的原始 uuid,而是采用包含的碎图的 uuid 哈希而来。要获取到对应的 png,你可以参考这个范例,写个插件,通过 getNativeAssetPaths API 获取 https://github.com/cocos-creator/demo-process-build-textures
赋一下插件实现,实现采集游戏内所有自动图集对应的图片真实路径,最终生成AutoAtlasRealPath.txt到build目录
const path = require('path');
const fs = require('fs');
const fsTool = require('../libs/fsTool');
function calculateAutoAtlasURLList(fpath,autoAtltasURLList,fileTypes){
var files = fs.readdirSync(fpath);
var autoAtltasUrl = ""
for(var i=0;i<files.length;i++){
fname = files[i]
var fg = fpath + "/" + fname;
var stats = fs.statSync(fg)
if(!stats.isDirectory()){
if(fsTool.isFileType(fname, fileTypes)){
autoAtltasUrl = fpath
break
}
}
}
if(autoAtltasUrl){
autoAtltasURLList.push(autoAtltasUrl)
}
else{
for(var i=0;i<files.length;i++){
fname = files[i]
var fg = fpath + "/" + fname;
var stats = fs.statSync(fg)
if(stats.isDirectory()){
calculateAutoAtlasURLList(fg,autoAtltasURLList,fileTypes)
}
}
}
}
function onBeforeBuildFinish (options, callback) {
// Editor.log(options);
// callback();
let buildResults = options.buildResults;
if(options.buildScriptsOnly){
callback();
return
}
var autoAtltasURLList = [];
fileTypes = [".pac"];
var fpath = path.join(options.project,'assets');
calculateAutoAtlasURLList(fpath,autoAtltasURLList,fileTypes)
var str = ""
var loadNext = () => {
if (autoAtltasURLList.length > 0) {
var autoAtltasURL = autoAtltasURLList.pop()
var urlFix = autoAtltasURL.split(options.project)[1]
urlFix = urlFix.slice(1)
// Editor.log("autoAtltasURL:"+ autoAtltasURL);
// Editor.log("urlFix:"+ urlFix);
Editor.assetdb.queryAssets('db://' + urlFix + '/**/*', 'sprite-frame', (err, assetInfos) => {
let textures = _getTextureFromSpriteFrames(buildResults, assetInfos);
let urlFixTmp = urlFix.slice('assets'.length + 1)
for (let i = 0; i < textures.length; ++i) {
let path = buildResults.getNativeAssetPath(textures[i]);
let pathFix = path
pathFix = pathFix.replace(/\\/g,"/")
Editor.log(`${pathFix}`);
pathFix = pathFix.split("/jsb-link/")[1]
// Editor.log(`Texture of ${urlFixTmp}: ${pathFix}`);
str += `${urlFixTmp}|${pathFix}\n`
}
loadNext();
});
} else {
var fp = path.join(options.project, 'build/AutoAtlasRealPath.txt');
fs.writeFileSync(fp, str, {flag: 'w'});
callback();
}
};
loadNext();
}
function _getTextureFromSpriteFrames (buildResults, assetInfos) {
let textures = {};
for (let i = 0; i < assetInfos.length; ++i) {
let info = assetInfos[i];
if (buildResults.containsAsset(info.uuid)) {
let depends = buildResults.getDependencies(info.uuid);
if (depends.length > 0) {
// sprite frame should have only one texture
textures[depends[0]] = true;
}
}
}
return Object.keys(textures);
}
module.exports = {
load () {
Editor.Builder.on('before-change-files', onBeforeBuildFinish);
},
unload () {
Editor.Builder.removeListener('before-change-files', onBeforeBuildFinish);
}
};
以“|”分隔,左边是图集路径 右边是图集生成的图片实际路径
我想在构建之前就知道生成合图的uuid,想请问下能不能做到?
目前不行,为什么构建前就要知道?
我们想选择性的压缩合图
如果构建之后才知道的话,每次修改的话都必须构建一次,不是特别方便
我想对构建成功之后的包的合图选择性的进行压缩。我是通过一份需要压缩的合图命名配置表,然后遍历包里面的图片,来确定该图片是否需要压缩。所以每一次有增删资源的话,又得重新构建,然后修改配置表。这就很不方便。
用万能的python写个命令行build然后建立目标文件缓存列表,筛选差异文件,再集成压缩纹理命令到python吧 
我试过命令行build,但是没试过集成压缩纹理命令,能展开说说吗?或者有没有事例 
编辑器内部实现纹理压缩也是通过命令行,我记得在编辑器的文件夹里有,去找找。另外不同压缩命令的参数都不一样,得去度娘或者谷歌去查查。
cocosDashboard\resources.editors\Creator\2.4.6\resources\static\tools
我记得,cocos的压缩纹理使对一种类型的图片都进行压缩的吧
是的,所以要么去下个缓存插件,要么自己动手写 
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。