# Cocos2d-x及原生目标引擎适配

# 一、概述

目前Cocos2d-x基于WebAssembly技术,也能转换到微信小游戏平台,已有Cocos2d-x游戏适配微信小游戏并上线。

Cocos2d-x引擎相对轻量,编译成wasm后的代码包较小,在启动耗时和内存消耗上有一定的优势。

其他原生目标游戏引擎,如果使用的编程语言有工具链能转换到WebAssembly,理论上也是可行的。可以填写文档最后的调查问卷。

# 方案特点

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

# 二、技术原理

我们已经有Unity WebGL微信小游戏适配方案,验证了原生目标引擎基于WebAssembly技术转换成微信小游戏的可行性。

其他的原生游戏引擎,可以参考Unity的模式,基于emscripten工具链进行适配支持。Cocos2d-x部分版本的适配已经完成。

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

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

# 三、Cocos2d-x接入流程

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

  • 可行性评估
  • 工具转换
  • 平台能力接入
  • 调优体验

# 可行性评估

Cocos2d-x游戏开发者可行性评估如下:

能力 是否支持 解决方案
引擎版本 部分支持 目前已跑通Cocos2d-x 3.17的版本,其他版本可考虑更换引擎版本,或者将适配修改迁移到对应版本(不推荐)
第三方库 部分支持 需开发者评估能否编译导出,或者看该库是否有web版本
渲染管线与接口 支持
Lua脚本 支持 支持标准Lua与常见binding(如xlua, tolua等), 不支持Luajit
音频 需适配 支持WebAudio及InnerAudio,长音频建议适配小游戏音频InnerAudio以优化内存
网络系统 需适配 暂未适配POSIX网络接口,可以使用websocket库(引擎自带)或者接入小游戏tcp/udp接口
多线程 部分支持 目前小游戏侧还没有完备的web worker,仅能在web worker里使用部分API,如网络及文件,且不支持SharedArrayBuffer
文件系统 需适配 微信侧可提供emscripten层适配(支持POSIX文件API),或者是用小游戏wx API
资源改造 改造重点 小游戏对启动时间及内存要求较高,因此资源管理不适合用手游的一次性加载的方式,需要改造为按需加载或者按场景加载,以加快启动,降低内存峰值
启动改造 需适配 基于emscripten的wasm应用启动有加载流程,这个阶段可以接入封面图插件优化体验

# 工具转换

目前微信侧可提供转换工具,可填写问卷与我们联系

# 平台能力接入

开发者可自行接入,也可联系微信侧获取c++ SDK

# 调优体验

主要关注启动耗时及运行性能(帧率,iOS高性能模式下的内存使用,crash情况),可参考Unity的调优文档

# 四、其他原生引擎接入评估

对于其他引擎的项目,引擎适配可行性评估如下:

引擎模块 是否支持 解决方案
引擎基础模块 部分支持 编译型语言需支持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层适配

# 五、联系我们

可填写收集表,我们会根据项目情况评估后建联

点击咨询小助手