安卓、iOS、小游戏三端同发?介绍给你一个新方式 - 普洱 WebGL
什么是三端同发?
手游时代的很长一段时间里,游戏业界有一个词语叫双端同发:指代安卓和 iOS 同时上线。在成熟的游戏引擎比如 Unity、cocos 等的加持下,做这样的事情并不难。
然而随着手机性能的发展。像微信小游戏、抖音小游戏这样的 web 平台,就像 pc 时代末期的浏览器一样如期而至,屡屡吸引大家的目光。这时候,“三端同发”的需求就出现了,一次开发,发布安卓、iOS、小游戏。理论上是这个时代手游开发最好的选择。
但遗憾的是,双端同发时代大家的首选引擎,Unity,并不太能做这件事,截至 2022 年,Unity 的最新版本都没有自带往各家小游戏的适配。这里的原因有很多,笔者就不总结了。
平台方提供的 WASM 小游戏方案
一方面是急切的需求,一方面是工具的缺乏,最后形成的局面是——平台方亲自下场做。微信抖音各自都推出了 unity 适配工具,将 Unity build 成 WebGL 的产物移植到小游戏上。这大概已经是比较不错的方案了。
然而这两个 wasm 方案虽然能解决 Unity 的 c#代码。但手游时代大家早已习惯用 Lua 作为脚本语言,以获得热更新的能力,这部分代码在转小游戏时应该怎么办呢?
以 xLua 为例,xLua 能把 Lua 虚拟机编译成 wasm,然后 Lua 代码最终会在这个 wasm 虚拟机中运行的 Lua 虚拟机解释执行——可想而知这个性能有多么容易成为瓶颈
并且,利用 WASM 解释执行脚本的特性还有可能随时被平台所封禁,比如抖音小游戏就明文规定不允许使用 xLua 动态变更代码。
三端同发背景下,可能是最好的脚本解决方案
puerts 是一个在 Unity/UE 下写 Typescript 的解决方案,本身就希望能让开发者可以在 Unity 里写 Typescript。既然都用 Typescript 了,是不是在小游戏上可以有不一样的方案呢?
答案是肯定的,去年,我让 puerts 在 WebGL 上给出了特别的答卷——puerts 本身变为 wasm 和宿主 js 环境通信的桥梁,将游戏脚本运行在宿主 js 环境上
脚本运行在宿主环境之后,便能享受 JIT 加速,调试等便利,大大提升脚本执行的效率。当然据实际使用反馈,最爽的一点还是“更改 JS 代码不需要重新构建 Unity”
去年测录的 WebGL 下 xLua 和 PuerTS 执行性能对比
在这个模式下,Puer 的 Loader 不再工作(因为不是解释执行了),而是使用小游戏平台的 require。因此使用普洱 WebGL,还是需要付出一些迁移工作。但这样一来 puer 就不会违反小游戏平台禁止热更的策略了。
普洱 WebGL 的现状
经过一年的沉淀发展,目前正在通过普洱接入微信小游戏的游戏有五六家,已上线的也有两三家了。
除了使用者之外,普洱社区也有不少积极的贡献者,为这个事情添砖加瓦。puer-webgl 的首个代表游戏的作者 ctxdegithub,就为 puer-webgl 贡献了一段关键代码。最近也有社区大牛整理了一套脚手架 puerts-cli,用以解决使用门槛的问题。
如果您对普洱的 webgl 方案感兴趣,欢迎点入 github 首页了解:https://github.com/zombieyang/puerts_unity_webgl_demo
评论