游戏引擎插件

功能介绍

绝大多数小游戏使用游戏引擎开发,使用的游戏引擎版本相似或相同,且在代码包中占比较大。引擎插件能力即是游戏引擎(作为插件)单独在微信客户端进行缓存。当小游戏首次启动时,如果本地已经存在同类别游戏引擎插件,可直接复用或可通过增量下载的方式快速下载,从而提升启动速度。

配置使用

使用新版引擎IDE或引擎工具重导出微信小游戏即可,无需手动修改。开发者可到引擎插件介绍界面,查看相关的插件指引。详细修改内容参见附录部分。

请开发者关注

  • 目前一个APPID,只支持引用一个插件

  • 目前支持整包小游戏使用插件,以及分包小游戏的主包使用插件

微信客户端调试

在Android微信和iOS微信的7.0.7版本(>=7.0.7),可直接体验和测试插件分离功能。使用了插件分离的小游戏,在console日志中会输出:

  1. plugin ***** inject success/fail!

建议对微信低版本(例如微信7.0.6版本)进行兼容性测试

微信开发者工具调试

编译

使用微信开发者工具的RC版本(>=1.02.1911181)或Nightly版本(>=1.02.1911202),使用2.9.0基础库(>=2.9.0)即可。>=2.9.0基础库在代码调试过程中,项目设置中的本地设置会出现 “使用本地插件” 的选项。

  • 勾选该选项后,代码调试过程中,将使用path 字段指定的目录中的文件作为插件代码文件进行调试(近似模拟微信低版本(<=7.0.6)的情况)
  • 不勾选该选项,代码调试过程中,将使用线上已发布的插件版本进行调试。(默认选项-近似模拟支持插件分离的微信高版本(>=7.0.7)的情况)

注意: 建议勾选与否本地插件均进行测试使用本地插件注意:

  • 一旦使用本地的插件进行调试,所指定的本地插件目录下的所有 js 文件都不会被工具进行编译,例如 ES6 转 ES5 或者增强编译。

代码上传/预览

(1) 对于 plugins 中有 path 字段的使用方式,上传/预览时,使用该字段指定的路径中的文件作为引用的插件代码并会进行合法性校验。

(2) 对于 plugins 中无 path 字段的使用方式,上传/预览时,系统会直接使用线上已发布的全量的 providerversion 版本的文件作为引用的插件代码

附录

配置修改

使用新版引擎IDE或引擎工具重导出后,会有三个变化。

(1) 引擎插件为单独目录,内置plugin.json和signature.json

其中signature.json用于校验,此两个文件不会打包到代码包中

(2) game.json中添加通用插件配置

(3) 使用引擎的方式变更为requirePlugin

(1) 引擎插件本地目录结构
  1. xxxx-lib
  2. --test.js //插件实现文件(可包含多个)
  3. --plugin.json //插件配置文件
  4. --signature.json //插件文件校验文件

plugin.json配置

  1. {
  2. "main": "index.js" //插件入口文件
  3. }

signature.json配置

  1. {
  2. "provider":"wxidfsdfsdfsdfsdf",
  3. "signature": [
  4. {
  5. "path": "aaa-js.js",//相对插件目录的路径
  6. "md5": "5951fef57e1b6902a1c5e5ae5a6ea441"
  7. }
  8. ]
  9. }
字段名称含义
provider插件申请的appId
signature插件目录签名
path插件文件(相对插件目录的路径)
md5对应文件的md5
(2) game.json添加的配置
  1. {
  2. "plugins": {
  3. "alias": { // 自定义的alias 是 requirePlugin 时用的 alias
  4. "provider": "wxidfsdfsdfsdfsdf",
  5. "version": "1.0",
  6. "path": "aaa"//目录结构
  7. }
  8. }
  9. }

字段含义:

参数名称参数含义
plugins通用插件的配置
alias自定义的alias requirePlugin时可用
provider插件的appId
version插件版本
path引擎插件的本地文件夹路径
(3) 使用引擎方式变更
  1. 1requirePlugin('alias') -- plugin.json中配置的alias
  2. 2requirePlugin('alias/xxx.js') -- 指定任意js文件