跳转到内容

微信小游戏

Estella 能把同一个项目导出为微信小游戏。你为微信目标构建引擎,从编辑器导出游戏, 再用微信开发者工具打开结果。

微信目标用微信的 WXWebAssembly 垫片编译 C++ 内核:

Terminal window
node build-tools/cli.js build -t wechat
# 侧模块,仅当你的游戏用到时:
node build-tools/cli.js build -t physics-wechat # 物理
node build-tools/cli.js build -t spine-wechat # Spine(一次构建 3.8 + 4.1 + 4.2)
node build-tools/cli.js build -t basis-wechat # KTX2 / 压缩纹理
node build-tools/cli.js build -t videodec-wechat # 视频(MPEG-1 wasm 解码器)
  1. 项目设置 → 打包 → 微信中,填写 AppID。屏幕方向是项目级设置——在项目设置 → 显示 → 屏幕方向里设一次即可(它驱动下面 game.jsondeviceOrientation)。

  2. 打开文件 → 构建…,在 Package Project 对话框里选 WeChat 平台, 检查构建场景列表,点击 Package。Estella 会烘焙资源,把 SDK 与你的 脚本打包(用 esbuild 打成 CommonJS),转换场景,并写出一个独立的小游戏包。

  3. 微信开发者工具打开输出目录,编译、测试、提交。如果 AppID 留空了, 在开发者工具里填进 project.config.json 即可。

输出目录包含 game.js(入口,负责引导 game-bundle.js —— SDK + 你的脚本)、 game.json / project.config.json(微信配置)、asset-manifest.json、以 scenes/<名字>.json 存放的场景,以及 wasm/ 目录 —— 引擎加上场景实际需要的 侧模块。构建里的每个场景都是 SceneManager.switchTo 的切换目标——非启动场景在 首次切换时才加载(见场景)。

在打包对话框勾选压缩纹理,把 PNG 烘焙为 KTX2 —— 包更小、首屏更快。两个微信 特有的细节,都已自动处理:

  • Basis 转码器以 basis-wechat 侧模块的形式随包发布——构建一次(见上),否则 导出会失败并给出确切命令。
  • 微信的代码包只接受白名单后缀,ktx2 不在其中——所以导出器把每个 .ktx2 暂存为 .ktx2.bin,运行时两种拼写都能解析。导出器还会在 project.config.json 里为每个 暂存的自定义扩展名(.skel.atlas.bin 等)生成 packOptions.include 规则,让开发者工具打包并读取它们。

惰性资源分组会成为 game.json 里的微信 subPackages。运行时, assets.loadGroup('level2') 底层会触发 wx.loadSubpackage,于是关卡按需下载,而不会 撑大初始包:

{
"deviceOrientation": "landscape",
"subPackages": [
{ "name": "level2", "root": "subpackages/level2" }
]
}
  • 保持在 4 MB 主包限制以内:把按需内容移到 subpackages/<name>/——见 资源。导出会设置 bigPackageSizeSupport,超限的包 在开发者工具里仍可预览——但上传照样卡限制。
  • 压缩纹理 —— 见上文;这是包体最大的一笔节省。
  • 在微信开发者工具里测试,而不只是浏览器——文件系统、存储与套接字后端都与 Web 不同。
  • 在游玩中预加载下一关的分组loadGroup),让分包下载不卡过渡。
  • 资源 —— 可寻址分组与 cook 映射到分包。
  • 构建与导出 —— Package Project 对话框。
  • 视频 —— 为微信随包发布的 MPEG-1 wasm 解码路径。
  • 联网 —— 那里套接字用 wx.connectSocket