前言
- 在这里,我遇到的问题是:游戏包超过 4m,并且小于等于 8M,不须要近程资源服务器,应用分包即可。
- Creator 推出了 2.4 版本,使得全平台都有了分包治理的能力,其实这句话我说的不够谨严,对于头条来说,这个 AssetBundle 就有些难堪了。如果将 bundle 放入 resource 目录下打包微信小游戏报错
因为咱们公布头条小游戏根本都是通过微信小游戏批改后上线,然而头条小游戏是不反对分包加载的,只能把资源都放到 resource 下,这岂不是难堪了吗?
我想到的计划
打包头条小游戏的时候还是须要先打微信包,只是在打包之前须要将之前设置的 AssetBudle 目录设置为一般目录,而后将资源包放回 resource 中。而后打其余包的时候再将 Bundle 文件夹从 resource 目录中拿进去。
公布步骤
- 敞开 Creator,将所有 bundle 目录及批改后的 meta 文件挪动到 resource 目录下并删除所有 bundle 目录及 meta 文件。
- 关上 Creator 批改代码逻辑,不应用引擎的 AssetBundle,这一部分通过我的 sdk 整合框架 + 我的 AssetBundle 应用形式很容易做到,这一步其实在切换平台的时候就实现了。
- 应用 Creator 公布微信小游戏,用头条开发者工具调试公布上线。
- 敞开 Creator 运行另脚本将 resource 下的所有 bundle 目录及批改后的 meta 文件再拷贝到 resource 外,并删除 resource 中的所有 bundle 目录及 meta 文件。
- 关上 Creator 公布其余渠道。
要害脚本
var fs = require('fs');
var path = require('path');
var file_util = require('./file_util')
// 须要被挪动到 resource 下的 bundle。var folderList = ['lobby','decoration','outdoor']
// 源目录
var asset_path = process.argv[2];
// 目标目录
var export_dir = process.argv[3];
// 是否是 bundle 1 和 0
var opt = process.argv[4];
function getBundleName(name){for(var i = 0; i < folderList.length; i ++){let s = folderList[i]
if(name.indexOf(s) >= 0){return s;}
}
return null;
}
function setBundle(meta_name,opt){console.log('meta_name',meta_name,'opt',opt)
var flag = opt == '1' ? true : false;
console.log('flag',flag)
let fileData = file_util.readFile(meta_name)
if(fileData){var obj = JSON.parse(fileData);
obj['isBundle'] = flag
console.log('fileData 2222',JSON.stringify(obj))
file_util.writeFile(meta_name,JSON.stringify(obj))
}
}
function exchangeFiles(asset_path,export_dir,opt) {var stat = fs.statSync(asset_path);
if (!stat.isDirectory()) {return;}
var subpaths = fs.readdirSync(asset_path),
subpath;
for (var i = 0; i < subpaths.length; ++i) {if (subpaths[i][0] === '.') {continue;}
subpath = path.join(asset_path, subpaths[i]);
console.log("subpath", subpath);
var fname = getBundleName(subpath)
if(fname){stat = fs.statSync(subpath);
if (stat.isDirectory()) {let dest_path = path.join(export_dir,fname)
file_util.mkdir(dest_path)
file_util.copyDir(subpath,dest_path)
file_util.delDir(subpath)
}else{
var meta_name = subpath
var exportMeta_name = path.join(export_dir,fname)+'.meta'
setBundle(meta_name,opt)
file_util.copyFile(meta_name,exportMeta_name)
file_util.deleteFile(meta_name)
}
}
}
}
exchangeFiles(asset_path,export_dir,opt)
结语
以上是我在应用 Creator2.4 版本公布头条小游戏时遇到的问题及解决方案。计划可能那个有点蠢笨,然而心愿对遇到同样问题的小伙伴有所帮忙,也心愿如果哪位小伙伴有更好的解决方案能够分享进去。
如需残缺脚本,请进入公众号回复”公布头条“获取网盘链接。
欢送扫码关注公众号《微笑游戏》,浏览更多内容。如果您感觉文章还能够,点赞、在看、分享、资助都是对我最大的激励,在下将感激不尽。
欢送扫码关注公众号《微笑游戏》,浏览更多内容。