- 基础能力和开发者服务
课程目标: 小游戏的基础能力和开发者服务在不断升级,协助开发者提升研发效率。 课程大纲: 一、2018年小游戏能力概况 二、完善的基础能力提升研发效率 三、小程序云:轻量化创新的服务端研发模式 四、小游戏社交能力升级 五、动态消息、实时语音营造更强社交游戏氛围 六、数据运营、资金结算支持提升开发者经营能力 七、提升开发者资金流效率,开放广告金快充等能力 [视频]
2022-03-30 - Unity小游戏适配最佳实践
课程目标: 为开发者分析APP小游戏适配的可行性,同时介绍Unity WebGL适配指南与最佳实践,帮助开发者高效适配小游戏环境。 课程大纲: 一、App小游戏适配的可行性分析 二、Unity WebGL适配指南&最佳实践 三、未来展望 “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。虽然大部分游戏的还原品质还不错,但适配方案尚不支持部分高级的渲染特性,如全局实时光照等。在这样的限制条件之下,小游戏需要达到什么样的性能呢? 我们建议开发者参考以下的性能建议: 高端机:首次进入游戏场景在10-15s以内,运行帧率>50fps中低端机:首次进入游戏场景在20s以内,运行帧率>30fps 启动及运行性能的最佳实践 01 启动 Unity WebGL在小游戏环境中的启动过程分为三个步骤: 1、下载和编译代码包,下载首资源包; 2、初始化引擎,加载首场景; 3、加载业务场景。 每个环节都有优化空间,我们也为开发者提供了能力工具来协助优化。例如WebAssembly代码分包的能力、压缩纹理工具等。 如果Unity WebGL在小游戏启动速度非常关键的话,而它的代码包体以及资源包体的大小则是重中之重了。 ● 代码包体 WebAssembly的运行机制,需要将WebAssembly代码包下载并编译,因此其大小会直接影响启动速度的整体消耗。一方面,微信底层提供了Brotli压缩/解压以减少下载带宽;另一方面,我们提供了WebAssembly代码分包工具让开发者将游戏前置阶段的代码集合剥离出来,在启动阶段只需下载一部分代码即可。除此外,开发者可通过裁剪第三方插件、精简代码、调整StripEngine级别来减小代码包体。 [图片] ● 资源包体 大部分游戏资源由纹理、音效和模型带来,Unity builtin压缩后小于1MB,因此开发者需要优化业务带来的资源量。关键点是做到资源的按需加载,比如使用AssetsBundle/Addressable来做延迟加载或将底层资源剥离。此外,还可以适当降低资源品质来取得平衡。 [图片] 02 运行性能 Native和WebAssembly是有算力差距的,从下图可以看出差距是3倍,而WebAssembly相对于JS又有50%的提升,因此WebAssembly运算能力介于Native和JS之间。 [图片] 在运算能力差距的客观条件下,可以通过工具和手段来调优,使得转换适配的游戏还拥有足够的流畅度。 工具上可以使用微信小游戏提供的Android CPU Profiler,在真机上获取热点函数并发现计算瓶颈;也可以使用Unity所自带的Profiler分析业务相关的CPU与内存性能瓶颈。 同时,开发者需要根据业务降低Drawcall、骨骼动画、物理等方面的计算使得游戏保持流畅。 最后,如果需要知道适配后的游戏在不同机型下的性能表现,可使用微信小游戏云测试,该能力使用云真机设备来帮助开发者验证机型适配问题。 除了目前提供的能力,未来小游戏团队将会在两个方面持续为开发者带来便利:一是Unity适配流程优化与性能提升;二是支持更多的WebAssembly应用场景。
2022-03-30