Godot:如何将你的Godot游戏移植运行到微信小游戏~
习惯安静点
编辑于 2024年11月02日 13:47
收录于文集
共3篇
godot-engine

1.什么是Godot:

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

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

cut-off

2.微信小游戏(小游戏平台)?

如果你已经了解过Godot, 那么肯定知道目前Godot是无法导出到小游戏平台的, 它只能支持导出到Web HTML5, 那么同样是类似web运行环境的小游戏能否成功运行Godot制作的游戏呢? 答案是肯定的!

先看结果, 再解析将godot运行在小游戏上需要处理哪些问题.

下图是我正在开发中的卡牌(扑克)回合制战斗游戏(使用godot3.6)

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

下图为实机运行效果

cut-off

那么核心问题来了, 为了要达到运行在小游戏上, 要做出哪些修改呢?

核心分为如下几步

  • 修改引擎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游戏移植到小游戏运行环境呢?

答案当然是有的, 以上所有繁琐复杂的操作都融入到一键操作中

Godot导出工具

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

cut-off

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