前言

  1. 在这里,我遇到的问题是:游戏包超过4m,并且小于等于8M,不须要近程资源服务器,应用分包即可。
  2. Creator推出了2.4版本,使得全平台都有了分包治理的能力,其实这句话我说的不够谨严,对于头条来说,这个AssetBundle就有些难堪了。如果将bundle放入resource目录下打包微信小游戏报错


因为咱们公布头条小游戏根本都是通过微信小游戏批改后上线,然而头条小游戏是不反对分包加载的,只能把资源都放到resource下,这岂不是难堪了吗?

我想到的计划

打包头条小游戏的时候还是须要先打微信包,只是在打包之前须要将之前设置的AssetBudle目录设置为一般目录,而后将资源包放回resource中。而后打其余包的时候再将Bundle文件夹从resource目录中拿进去。

公布步骤

  1. 敞开Creator,将所有bundle目录及批改后的meta文件挪动到resource目录下并删除所有bundle目录及meta文件。
  2. 关上Creator 批改代码逻辑,不应用引擎的AssetBundle,这一部分通过我的sdk整合框架+我的AssetBundle应用形式很容易做到,这一步其实在切换平台的时候就实现了。
  3. 应用Creator 公布微信小游戏,用头条开发者工具调试公布上线。
  4. 敞开Creator 运行另脚本将resource下的所有bundle目录及批改后的meta文件再拷贝到resource外,并删除resource中的所有bundle目录及meta文件。
  5. 关上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和0var 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版本公布头条小游戏时遇到的问题及解决方案。计划可能那个有点蠢笨,然而心愿对遇到同样问题的小伙伴有所帮忙,也心愿如果哪位小伙伴有更好的解决方案能够分享进去。
如需残缺脚本,请进入公众号回复 ”公布头条“ 获取网盘链接。

欢送扫码关注公众号《微笑游戏》,浏览更多内容。如果您感觉文章还能够,点赞、在看、分享、资助都是对我最大的激励,在下将感激不尽。

欢送扫码关注公众号《微笑游戏》,浏览更多内容。