
Godot是一款免费的开源的跨平台游戏开发引擎,支持2D,3D和XR开发, 如今版本已经进入到4.4


作为一款开源项目, 在github拥有90K start, 为开源游戏引擎第一, 项目十分活跃


如果你已经了解过Godot, 那么肯定知道目前Godot是无法导出到小游戏平台的, 它只能支持导出到Web HTML5, 那么同样是类似web运行环境的小游戏能否成功运行Godot制作的游戏呢? 答案是肯定的!
先看结果, 再解析将godot运行在小游戏上需要处理哪些问题.
下图是我正在开发中的卡牌(扑克)回合制战斗游戏(使用godot3.6)

下图为微信开发者工具运行效果

下图为实机运行效果


核心分为如下几步
修改引擎JavaScript部分代码, 修正Webgl和Canvas相关部分为小游戏环境, 调整引擎模块初始化
使用小游戏音频模块(基础音频模块无法使用, 默认使用的是WebAudio, 消耗CPU的性能过大, 声音播放不连续卡顿)
重写文件系统(底层使用小游戏文件API
分包PCK加载处理
每个部分都是一句话都可以概括, 但是中间的复杂度是非常大的, 花费时间最少的就是在微信开发者工具当中跑起来, 这个只需要修复运行时的一些逻辑即可
音频模块部分需要在godot层面和js层面分别提供对应的组件和sdk代码, 才能方便顺利使用, 需要了解小游戏音频接口, 熟悉godot音频
复杂部分1.文件系统
Godot的HTML5运行时, 文件处理是在浏览器中的IndexDB, 这个作为最终游戏内文件写入的落地存放位置, 而小游戏环境中没有这个,就只会使用内存文件系统.这部分只能通过小游戏文件系统API来重写, 这部分需要熟悉Emscripten, Godot引擎c++代码经过编译到wasm后, 代码转换和编译都是通过Emscripten, 非常复杂
复杂部分2.分包
小游戏分包规则如下
整个小游戏所有主包+分包大小不超过 30M
主包不超过 4M
单个普通分包不限制大小
单个独立分包不超过 4M
我们的引擎经过编译和压缩后刚好在4M内,一个包内即可把游戏引擎加载完成, 富裕的几百K空间还可以放一个加载场景

为了流畅体验, 我们在引擎加载完即可把Loading的场景加载渲染出来, 这里面也可以包含登陆等.后面的加载游戏主体pck就需要额外的处理了,显然第一个包已经放不下更多东西了, 因为引擎默认大多数情况下只处理主pck(包), 在第一个pck加载完成后,就会执行一些特殊的操作, 导致后面加载分包pck不走这个流程, 代码加载会出问题.
这里就需要我们修改引擎的资源加载代码, 使其能够正确执行我们的逻辑和加载资源.
既然这么复杂,那么有没有方便的办法将我的Godot游戏移植到小游戏运行环境呢?
答案当然是有的, 以上所有繁琐复杂的操作都融入到一键操作中

导出工具预计11月底前上线, 到时候会发布视频来教如何使用, 目前针对Godot3.6版本, 不是跟随Godot主流选择最新4.x版本是因为3.x稳定, 兼容性好, wasm编译体积小, 使用3.x的小伙伴可以期待一下!

QQ群放这里, Godot开发交流或者工具的新进展都在群里第一时间通知~
