# 其他原生目标引擎适配

## 一、概述

原生目标游戏引擎，如果使用的编程语言有工具链能转换到WebAssembly，理论上都可以适配到微信小游戏平台运行。

>  对于已支持 WASM + WebGL 导出的引擎（如 Cocos2d-x、UE 等），推荐直接使用[通用引擎适配方案](common-adaptation)，该方案提供了完善的转换工具和能力 SDK 支持。

### 方案特点

* 保持原引擎工具链与技术栈
* 无需重写游戏核心逻辑
* 引擎层转换工具与微信小游戏运行环境保证适配兼容，保持较高还原度
* 通过封装SDK对接平台开放能力

## 二、技术原理

基于 WebAssembly 技术，原生游戏引擎可以通过 emscripten 工具链编译为 WASM 模块，配合平台适配层在微信小游戏环境中运行。

适配到微信小游戏，游戏开发的流程及运行时支持如下：

* 开发阶段：对接平台能力
* 导出阶段：使用转换打包工具，直接转换成小游戏包
* 运行阶段：微信侧提供WebAssembly基础能力及底层接口支持

 ![](https://res8.wxqcloud.qq.com.cn/wxdoc/cdcd0a1b-4bc0-4a92-8849-74d917e00933.png) 

## 三、原生引擎接入评估

对于原生引擎的项目，引擎适配可行性评估如下：

引擎模块|是否支持|解决方案
-|-|-
引擎基础模块|部分支持|编译型语言需支持emscripten工具链编译，解释型语言则看语言虚拟机是否能编译成wasm
第三方库|部分支持|类似基础模块编译导出，或者看该库是否有web版本
渲染管线与接口|支持WebGL（1.0及2.0）|可根据需要自行适配emscripten提供的egl或html5_webgl API，也可使用emscripten对glfw,SDL,GLUT等库的兼容
脚本|部分支持|需语言虚拟机可编译成wasm（暂不支持JIT），如lua，或者使用js（支持JIT），如PuerTS
音频|支持|需引擎层或者第三方库适配，目前有web audio及原生的InnerAudio两种API可用
网络|支持|需引擎层或者第三方库适配，目前支持http/websocket/tcp/udp
多线程|部分支持|目前小游戏侧还没有完备的web worker，仅能在web worker里使用部分API，如网络及文件，且不支持SharedArrayBuffer
文件系统|支持|需引擎层或者第三方库适配到小游戏wx filesystem，微信侧可提供emscripten层适配

## 四、接入流程

接入流程主要包含以下几个环节：

* **可行性评估**：根据上述评估表，确认引擎模块是否支持编译为 WebAssembly
* **工具转换**：使用[通用引擎适配方案](common-adaptation)提供的转换工具进行格式转换
* **平台能力接入**：通过能力 SDK 集成网络、文件系统、微信开放接口等平台能力
* **调优体验**：主要关注启动耗时及运行性能（帧率、内存使用、crash情况），可参考[通用引擎适配方案](common-adaptation)中的相关文档

## 五、联系我们

可填写[收集表](https://wj.qq.com/s2/14617948/b52b/)，我们会根据项目情况评估后建联
