查看原文
其他

手游很难转微信小游戏?我们提供了一套Unity适配指南

在《小游戏开发者学院》第三季第四讲“Unity小游戏适配最佳实践”中,讲师Ocean搭配案例为开发者分析APP小游戏适配的可行性,同时介绍Unity WebGL适配指南与最佳实践,帮助开发者高效适配小游戏环境。


APP小游戏适配的可行性分析


优质的APP很难转换成微信小游戏,主要原因在于编程语言、游戏引擎选型、系统底层能力等因素导致的技术架构差别。在微信小游戏环境下,开发者需要使用TS/JS进行业务逻辑的开发,引擎则会使用更轻量的H5游戏引擎。此外,在底层的能力使用上,开发者也需要使用微信小游戏所提供的JS API。


如果要将一款APP手游移植到微信小游戏做多端开发,需要更换游戏引擎和编程语言, 最终游戏品质也不一定能完全还原。

WebAssembly是近几年发展较快的前端技术,简单来说它是高效的栈式虚拟机。WebAssembly不仅可以将强烈型的编程语言编译成中间语言,并且MVP特性也已被主流的浏览器支持。这使得开发者可以借助WebAssembly技术将原生应用移植到Web上。

而在游戏业务上,则需要结合生产端和发布端两方面来考虑如何将原生游戏移植到Web环境中。在游戏应用场景,可以看到在生产端和发布端已支持原生游戏移植到Web环境中。


在生产端Unity、Unreal可以直接发布成以WebAssembly为基础的H5游戏包,在发布端许多H5游戏平台都支持这种方式导出的游戏包。

除了Web环境,是否也可以将APP手游以这种方案移植到微信小游戏环境呢?基于此,我们提供了新的能力WebAssembly。除了WebAssembly标准接口外,还对微信小游戏环境进行了优化,包括性能提升和扩展能力支持。

那么如何使用WebAssembly帮助小游戏开发呢?开发者可以根据自身团队情况来使用这项能力。

• Unity等原生引擎制作的项目

使用Unity等原生引擎来制作游戏项目的开发者,可以导出H5并进行小游戏适配。

• 团队维护的自研引擎

使用强类型编程语言的自研引擎,可使用emscripten工具链编译成WebAssembly,再适配到小游戏环境。

• 使用TS/JS开发的H5小游戏

使用JS/TS开发的小游戏,可使用WebAssembly重写部分重度逻辑,提升整体游戏性能。

下图有三个实际的小游戏适配案例:Unity Tiny、bgfx渲染框架、GamePlay游戏引擎。


可以发现,这三个例子都有一个共同特点,它们都使用了强类型的编程语言,通过编译成WebAssembly,最后在微信小游戏环境里进行了适配。

Unity WebGL适配指南&最佳实践


开发者对于Unity WebGL应该不陌生,这是一个Build Target,能将Unity的Runtime、业务逻辑代码,以及第三方插件都编译成WebAssembly并运行在浏览器环境。为了使Unity WebGL导出包能在微信小游戏环境得到支持,我们一共做了三个事情

• 开发阶段:提供了平台能力的C# SDK,帮助开发者快速对接平台能力;

• 导出阶段:提供了转换工具,帮助开发者做Unity WebGL的胶水层适配并导出微信小游代码包;

• 运行期:提供了WebAssembly的执行环境及微信底层能力。

目前Unity WebGL适配的小游戏已经可以很好地运行在Android、iOS和PC微信上,Android和PC微信运行性能还不错,iOS还在优化阶段。

目前已经有多款游戏使用UnityWebGL转换方案,开发者可以扫码进行体验适配后的小游戏效果。



APP游戏如何接入适配?


我们将整个接入适配的过程分为4个部分:可行性评估-游戏转换-接入平台能力-性能调优。

可行性评估


使用Unity WebGL适配方案的小游戏不需要更换游戏引擎,也不需要重写核心逻辑,还可以使用第三方插件(无源码的C原生插件除外)。但需要注意的是并不是所有游戏都适合适配转换,比如目前还不支持WebGL2.0, 并且在算力上WebAssembly 与Native还存在差距且不支持多线程和SIMD。

• 游戏转换

在满足可行性评估后,就可以使用转换工具进行游戏转换了。


从上图可以看出,游戏运行在微信小游戏环境和Unity Editor的还原度是非常高的,中间的转换工具是以Unity插件方式提供,开发者只需要填写基本的属性就可以使用转换插件一键导出。

• 接入平台能力

在进行转换过程后,如果游戏还原度满足需求,就可以接入微信小游戏的开放能力了,如分享、支付、广告等。这里我们提供了C# SDK,它涵盖了目前微信小游戏所提供的大部分开放能力,开发者使用C# SDK能够很快适应平台能力的对接。

• 性能调优

这是整个转换流程中最重要也是最耗费人力、时间的一个环节。在调优之前,需要先了解Unity手游APP和WebGL在性能和体验上的差异。

用户习惯:小游戏玩家习惯于即点即用,而手游玩家是可以接受一定的下载时间,这会为适配方案的启动速度带来挑战。


运行机制:WebAssembly是基于虚拟机,运算性能不如原生机器码


硬件算力:WebAssembly目前版本还不支持多线程和SIMD,这会进一步造成算力上的差距。


渲染能力:目前只支持Unity WebGL 1.0。虽然大部分游戏的还原品质还不错,但适配方案尚不支持部分高级的渲染特性,如全局实时光照等。


在这样的限制条件之下,小游戏需要达到什么样的性能呢?

我们建议开发者参考以下的性能建议:

1、高端机:首次进入游戏场景在10-15s以内,运行帧率>50fps

2、中低端机:首次进入游戏场景在20s以内,运行帧率>30fps

启动及运行性能的最佳实践


1

启动


Unity WebGL在小游戏环境中的启动过程分为三个步骤:

1、下载和编译代码包,下载首资源包;


2、初始化引擎,加载首场景;


3、加载业务场景。


每个环节都有优化空间,我们也为开发者提供了能力工具来协助优化。例如WebAssembly代码分包的能力、压缩纹理工具等。

如果Unity WebGL在小游戏启动速度非常关键的话,而它的代码包体以及资源包体的大小则是重中之重了。

 代码包体

WebAssembly的运行机制,需要将WebAssembly代码包下载并编译,因此其大小会直接影响启动速度的整体消耗。一方面,微信底层提供了Brotli压缩/解压以减少下载带宽;另一方面,我们提供了WebAssembly代码分包工具让开发者将游戏前置阶段的代码集合剥离出来,在启动阶段只需下载一部分代码即可。除此外,开发者可通过裁剪第三方插件、精简代码、调整StripEngine级别来减小代码包体。


● 资源包体

大部分游戏资源由纹理、音效和模型带来,Unity builtin压缩后小于1MB,因此开发者需要优化业务带来的资源量。关键点是做到资源的按需加载,比如使用AssetsBundle/Addressable来做延迟加载或将底层资源剥离。此外,还可以适当降低资源品质来取得平衡。


2

运行性能


Native和WebAssembly是有算力差距的,从下图可以看出差距是3倍,而WebAssembly相对于JS又有50%的提升,因此WebAssembly运算能力介于Native和JS之间。


在运算能力差距的客观条件下,可以通过工具和手段来调优,使得转换适配的游戏还拥有足够的流畅度。

工具上可以使用微信小游戏提供的Android CPU Profiler,在真机上获取热点函数并发现计算瓶颈;也可以使用Unity所自带的Profiler分析业务相关的CPU与内存性能瓶颈。

同时,开发者需要根据业务降低Drawcall、骨骼动画、物理等方面的计算使得游戏保持流畅。

最后,如果需要知道适配后的游戏在不同机型下的性能表现,可使用微信小游戏云测试,该能力使用云真机设备来帮助开发者验证机型适配问题。

除了目前提供的能力,未来小游戏团队将会在两个方面持续为开发者带来便利:一是Unity适配流程优化与性能提升;二是支持更多的WebAssembly应用场景。


扫描左边二维码或点击蓝字查看Unity WebGL小游戏转换方案

重点问题回顾


除了以上说到的干货之外,在直播课程中,讲师进行了在线答疑,以下是部分解答:

 Unity WebGL接入微信小游戏可以用了吗?工具是否收费?
适配方案现在已经对外公测,完全免费使用。开发者可以通过二维码找到项目地址,其中包含了Unity WebGL适配小游戏所需要的工具、文档以及最佳实践,如果适配过程中遇到任何问题也可以通过助手与我们联系。

● Unity WebGL转小游戏的改动量和花费时间是多少?
满足可行性评估的游戏通常能在一周左右在微信小游戏环境看到还原品质,但接下来更重要的是接入平台能力和性能调优,这部分时间需要根据不同游戏的情况来具体分析。

 Unity Tiny也可以适配到微信小游戏吗?
可以。微信小游戏环境已经提供了足够Unity Tiny所需要的运行环境,因此大家也可以将Unity Tiny适配过来。

● 游戏中使用了Lua能否进行适配?
Unity WebGL基于WebAssembly,由于运行性能的原因,我们不建议开发者对使用了Lua的项目进行转换。

● 物理引擎,网格寻路,骨骼动画,地形等Unity内置功能有支持吗?
支持。得益于Unity自身具有比较好的跨平台兼容性,Unity WebGL适配小游戏后这些基本功能都可以被正常使用。

● 适配方案支持哪些Unity渲染管线?是否支持自定义Shader?
支持标准渲染管线和URP可编程渲染管线。支持游戏自定义Shader,但需要注意的是Unity WebGL小游戏适配目前只支持WebGL1.0。

下期预告


微信小游戏开发者学院第三季第五讲“休闲小游戏投放方法论-进阶版”于7月7日20:00继续开讲,将从以下几个方面展开:


● 买量风向标&调优方法论
● ROIoCPM使用指南
● 休闲小游戏热门案例解读

届时公开课讲师也会面对面为大家解答疑惑,欢迎大家关注预约。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存