Cocos 3.x 发布系列一 微信小游戏

参考
快过年了,分享一个平台判断的代码
构建时常量

官方文档 跨平台发布游戏
CocosCreator小游戏项目的远程资源管理总结
Creator+微信小游戏(2):服务器远程加载资源(4M限制、socketio问题)
Cocos Creator踩坑篇:微信小游戏将资源放到远程服务器并加载的完整流程

一、发布微信小游戏
1.根据微信官方文档注册小游戏账号

如果只能看到小程序,看不到小游戏。需要根据指引填写信息和提交相应的资料,服务类目应选择“游戏”,子类目可以先选择“休闲游戏”,就可以拥有自己的小游戏帐号。

2.根据COCOS官方文档发布微信小游戏

这里注意发布面板填上自己的appid

3.使用微信开发者工具,选项目->导入,就能看到自己的小游戏了。
4.真机调试报错
image.png

小游戏打包超过4M太正常了。常规做法是把res目录(游戏资源)放到远程服务器,小游戏启动的时候自动去服务器下载资源。
如果要想正常发布你的小游戏,你必须把资源必须放在具有https域名的服务器里。。
所以你需要:
1、买个ECS服务器,供应商没限制;
2、买个域名,几十块钱一年也还行。
3、https认证。这个也有免费的。
4、域名备案。这个也不要钱,就是手续比较麻烦。
当然,如果你的小游戏只是自己的微信号预览调试,使用http也可以凑合下。

二、把资源放到远程服务器
1.本地测试,使用anywhere弄个http服务器

npm install anywhere -g
比如在D:\CocosProject\remoteDir中使用anywhere -p 8090 -s启动服务器。

2.项目参考官方示例Step By Mind,只使用了cocos包下的模型
image.png
3.将cocos文件夹设置:目标平台微信小游戏,勾选配置为远程包
image.png
4.打包时,填上我们测试用的http服务器
image.png
5.打包完成后检查build/wechatgame路径

和之前相比,打包多出来一个remote文件夹,将此文件夹剪切到D:\CocosProject\remoteDir即可。
重新运行,发现可以正常游戏。但是,真机调试仍然报错超过4M。
经过检查,JS包接近4M

image.png

main主包仍然接近4M
image.png

这是因为我们的主场景就加载了cocos模型。
image.png

参考官方文档 Asset Bundle 介绍

项目中除了自定义的 Asset Bundle 外,Creator 还有内置的 3 个 Asset Bundle。与其他自定义 Asset Bundle 一样,内置 Asset Bundle 也可以根据不同平台进行配置。

image.png
  • main 存放所有在 构建发布 面板的 参与构建场景 中勾选的场景以及其依赖资源 (通过配置 构建发布 面板的 主包压缩类型 和 配置主包为远程包 两项)
  • resources 存放 resources 目录下的所有资源以及其依赖资源 (通过配置 资源管理器 中的 assets -> resources 文件夹)
  • start-scene 如果在 构建发布 面板中勾选了 初始场景分包,则首场景将会被构建到 start-scene 中。 (无法进行配置)
6.把首场景做成加载scene,就放个进度条。在首场景中加载cocos模型的prefab。

这里打包后,仍然发现main bundle有4M左右,经过检查,还是有cocos模型文件。看起来和bundle的优先级有关,因为main bundle是参与构建场景的资源,而我们的mainscene使用了cocos模型。所以cocos bundle包的优先级就需要比main bundle的优先级7更高。cocos bunlde设置为10之后,重新打包,可以发现main bundle终于变小了。

这个在 oppo小游戏远程服务器的回复中也能看到:

bundle是有优先级的,要想打到bundle里不打主包里,bundle的优先级至少设置成8

7.将remote文件夹剪切到D:\CocosProject\remoteDir,使用微信开发者工具重新打开

image.png

有类似downloadFile:fail createDownloadTask:fail url not in domain list的报错。
参考微信 官方文档,勾上这个即可解决:
image.png

现在终于能看到游戏了,远程加载资源如下
image.png

不过真机调试还是超了一点:
image.png

8.分离引擎

游戏引擎插件是微信 7.0.7 版本新增的一项功能。此插件内置了 Cocos Creator 引擎的官方版本,若玩家首次体验的游戏中启用了此插件,则所有同样启用此插件的游戏,都无需再次下载 Cocos Creator 引擎,只需直接使用公共插件库中的相同版本引擎,或者增量更新引擎即可。
例如,当一个玩家玩过了由 Cocos Creator v2.2.0 开发的 A 游戏,里面已启用了此插件。然后他又玩了同样是 v2.2.0 开发的 B 游戏,如果 B 游戏也启用了此插件,那么就无需重新下载 Cocos Creator 引擎。即使 B 游戏使用的是 v2.2.1 的 Cocos Creator,微信也只需要增量更新引擎两个版本的差异部分。这样就可以大幅减少小游戏的下载量,提升小游戏启动速度 0.5 ~ 2s,获得更好的用户体验。

参考3.0裁剪模块后,导出微信小游戏仍然有所有模块,是哪里没操作对?
作者表示在项目中剔除了许多功能,但是打包后,引擎模块都在。

image.png

微信引擎分离插件在线上只有一份,只有两份插件代码一致才能做到复用,因而勾选后包内会有带有完整的引擎包。希望减少包体的话不应该勾选此选项。

Q:引擎插件功能是否支持自定义引擎?
A:不支持,构建时如果版本不匹配或者启用了自定义引擎,虽然编辑器在出现报错后会继续构建,但是构建生成的包实际上无法正常使用引擎插件。

Q:项目开启了引擎的模块裁剪,要使用引擎插件的话需要还原为完整版引擎吗?
A:无需修改,项目可以按原来的方式继续裁剪引擎。引擎插件提供的是完整版引擎,能兼容所有的裁剪设置,不会影响原有项目的包体。

Q:启用引擎插件后,是否仍然会把引擎代码算入首包包体中?
A:根据微信的规则,目前仍然会计算在内。

Q:开启引擎插件后,是否可以在编辑器主菜单中的 项目 -> 项目设置 -> 功能裁剪 中移除所有模块,减小包体?
A:不可以,因为微信从 7.0.7 开始才支持引擎插件,如随意裁剪引擎可能导致游戏无法在低版本微信上运行。

Q:启用引擎插件后,在微信开发工具中提示 “代码包解包失败” 或者 “..., 登录用户不是该小程序的开发者”,但真机预览正常?
A:构建面板中默认的 appid 为通用测试 id。根据微信的规则,如需测试引擎分离功能,需要开发者在构建面板中填入自己开通的 appid。

Q:启用引擎插件后,在微信开发工具中提示 “插件未授权使用 添加插件”?
A:点击提示中的 添加插件,选择添加 CocosCreator 插件后重新编译即可。若添加插件时出现“可添加的插件信息为空”的提示,可尝试在微信开发者工具中选择 清缓存 -> 全部清除 后重试。

9.ammo.js的fallback 模式

使用 fallback 模式时,编辑器会打包 wasm 和 js 模式的代码,两个模式对应的代码包体分别为 1.2MB 和 0.7MB,总共接近 2MB,这对主包 4MB 的限制影响很大。解决办法是通过配置子包来减轻主包的压力,这里以 ammo-82499473.js 文件为例,操作步骤参考官方文档。

本案例使用了物理效果,暂时使用js模式。最终打出的主包是3.5M左右。

10.安卓手机兼容性

我的荣耀手机真机调试提示:该页面不存在 你可以进入null首页获取更多服务
别的安卓手机可以

三、其他打包选项
image.png
1.MD5缓存

MD5 cache。点上这个以后,每次发布生成的资源名都会加上md5码,你可以理解为每次发布后文件名都变了,这是为了避开浏览器缓存资源。当然砸出的坑就是每次发布后你都要同步更新服务器资源。

2.主包压缩类型

https://forum.cocos.org/t/topic/114798/17

经过反复试验,发现 分包这部分的文档 没有说明要在构建项目的时候选择 主包压缩类型为小游戏分包


image.png
3.配置主包为远程包

该项为可选项,需要与 资源服务器地址 选项配合使用。 勾选后,主包会配置为远程包,并且与其相关依赖资源一起被构建到发布包目录 remote 下的 内置 Asset Bundle — main 中。开发者需要将整个 remote 文件夹上传到远程服务器。

这里我的main主包只有几张加载页面,大小只有几十K。当然放远程包,也能节省出来一点点空间,没太大必要。

4.自动图集

自动图集资源 (Auto Atlas)
自动图集资源 目前是以当前文件夹下的所有 SpriteFrame 作为碎图资源,然后在构建过程中将其打包成一个大的 Sprite Atlas。

image.png

在游戏中使用多张图片合成的图集作为美术资源,有以下优势:

  • 合成图集时会去除每张图片周围的空白区域,加上可以在整体上实施各种优化算法,合成图集后可以大大减少游戏包体和内存占用
  • 多个 Sprite 如果渲染的是来自同一张图集的图片时,这些 Sprite 可以使用同一个渲染批次来处理,大大减少 CPU 的运算时间,提高运行效率。

参考这种情况下,自动图集是否形同虚设?

image.png

这里经过测试,如果一个bundle文件夹出现了自动图集,则打包出来的资源会有合图和碎图两份资源,相当于包体变大了。官方给出的解释是:

放在bundle文件夹下,默认每个资源都可能被动态加载,都会打包。放在普通文件夹内的资源都是只有被使用才会被打包。 官方会在3.1.0版本中对此进行优化。

参考Cocos Creator 3.1 携多线程渲染架构和 PhysX 物理支持强势登场

自动图集面板新增针对 Bundle 内使用自动图集的优化选项,共增加三个选项,用于自动图集在 Bundle 内时的一些不必须信息剔除,优化包体
优化自动图集被多个 Bundle 引用导致图片被复制的问题,减少包体

image.png

但是我在3.1版本中经过测试,把这几个选项勾上,仍然会把合图和碎图都打包出来。
当我把Bundle优先级设置为1时,合图会出现在main包里。当优先级设置为10时,合图和碎图都会出现在bundle中。

四、微信小游戏要求图片尺寸在2048以下

参考
小游戏中图片对尺寸限制在2048像素,长宽要小于等于2048像素
能不能有种像Unity那样指定图片最大尺寸的功能?
微信小游戏创建image对象,大小不能超过2048像素

参考
Creator 2.4.5 构建微信分包,微信开发工具真机调试报错:not node js file
loadBundle 就会报错,但不影响游戏运行

cc.assetManager.loadBundle(‘bundle-name’, (err, bundle) => {
if (err) {
return console.error(err)
}
cc.log([Bundle 加载])
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容