微信小游戏技术升级分享:高性能+模式、新工具、引擎快适配更新
【ashkeling专稿,未经授权不得转载!】
ashkeling报道/1月11日,一年一度的微信公开课Pro如期而至,微信小游戏作为微信生态关键组成之一,也在当天的活动中设立了专场论坛,从“赋能”与“价值”两个角度,通过一系列演讲分享了他们对小游戏生态的最新思考和未来规划。
其中,微信公开课讲师刘昕禹则从技术的角度出发,回顾了过去小游戏平台为了更好地服务于开发者,同时为用户提供更好的内容,在底层基础建设方面做出的尝试,同时介绍了微信小游戏平台在代码包扩容、性能诊断监控、引擎快适配等方面做出的努力和成果,以及未来的规划。
以下是ashkeling整理的完整演讲:
刘昕禹:亲爱的现场来宾,大家好,我是来自微信小游戏团队的公开课讲师,我叫刘昕禹。今天我们带来的演讲主题是小游戏技术升级新体验。本次公开课我们将主要围绕基础能力的升级、两个效能工具和引擎快适配三个方面来做简要的分享。
我们小游戏生态中的游戏作品真的是越来越丰富了,随之而来的问题就是开发者们需要更新更多的游戏内容,那么这就对代码包体积上限有了更高的要求。
在过去的几年中,微信小游戏团队持续评估整体的发展需要,对代码包上限做了多次调整。
那么截至目前,对于满足条件的小游戏已经可以发布最高不超过30兆代码包体积的小游戏了,但这里就需要开发者们将自己的游戏代码包合理地拆分成主包与分包两个部分,主包的大小仍然不能超过4兆,分包大家可以根据自己的子场景,后续的关卡进行合理的划分,再在合适的时机按需加载。
其实我今天更想表达的是,尽管平台进一步地放开了代码包体积的上限,但这也需要开发者们更加地约束自己,合理地去利用这些资源空间,让即点即玩的小游戏能够带给用户更轻便且丰富的游戏内容。
可能有一些开发者在日常的开发调试中会发现,普通模式下iOS的小游戏的性能是远不如安卓手机的,所以我们在2022年下半年就推出了iOS高性能模式,高性能模式下iOS的JS脚本执行也享受到了编译加持,性能也就得到了大幅提升。
但是在实际的应用中我们也发现了一些问题,就比如运行设备的内存明明还有大量的空闲空间,但是小游戏仍然发生了因为内存不足而引发的退出,这是由于高性能框架它自身提前限制了内存上限,于是我们今年带来了“高性能加”模式,我们可以看一下右边的示意图,我们将原本的高性能框架中的webGL渲染,通过跨进程通讯技术,交由了微信客户端的原生渲染实现,那么就释放了高性能框架中的一部分渲染内存,我们为游戏的业务逻辑争取了大约150兆的内存空间。
值得一提的是,高性能加模式不仅解决了内存的紧张问题,同时也改善了外部webGL2下的一些渲染问题,整体提升了渲染的稳定性。
高性能模式目前已经有很多的游戏都在使用,并验证了它的可靠性。对于还没有开启这个模式的开发者们,我们非常推荐大家开启这个模式。那么高性能加模式我们也已经开放了测试,大家可以阅读底部的指引进行申请体验。
随着小游戏生态内容的不断壮大,安全问题不容小觑,本节将主要围绕代码保护、内容安全和外挂防护三个方面做一个分享。
代码保护方面,我们知道JsScript是一个解释性的语言,它在运行设备中是以明文的方式存在,那么防止别人去阅读、理解和盗用代码一种常用的手段就是代码混淆。我们小游戏平台为大家提供了一个代码混淆工具,那么使用我们平台提供的工具,它处理后的膨胀体积会很小,性能损失低,而且还原难度高,并且我们也配套提供了代码水印的能力,可以有效地防止在平台内发生的代码侵权问题。
这个功能的使用也是非常简单的,我们只需要在开发者工具中添加游戏深度保护插件,就可以快速地对代码进行安全加固了。
而游戏用户的增多,营造一个绿色健康的环境是非常重要的。内容安全方面,我们为开发者提供了UGC的检测接口,我们的接口具备更快的响应速度,以及可以根据游戏垂类定制的策略,那么涉及UGC的游戏作品,就欢迎大家应接尽接这个能力。
对于外挂方面,我们相信也是很多游戏公司很头疼的地方。而其中作弊手段常见的手法就是对内存变量的修改和网络协议的中间人攻击,而对于内存保护,我们提供了一套开源的内存数值保护插件,大家可以做好游戏内的关键数值保护。
至于网络协议方面,我们推荐大家使用微信提供的Donut安全网关,进行对关键请求的数据保护,可以防止中间产生的数据劫持。此外我们也提供了外挂的诊断报告能力,可以针对游戏去做专项的漏洞检测。外挂防护始终都是一个持久对抗的过程,也是希望大家能够提升对外挂防护的安全意识。
第二个章节是我们平台新提供的两个工具,我们一起看一下。
小游戏平台为了方便开发者更快地在调试阶段就能定位问题,我们在此前也提供了一些工具,比如说云测试服务,云测服务是通过集群的方式来让开发者去体验游戏在不同设备下的一个运行状况。
那么我们今天也带来了一个新工具,是一个基于本地的性能诊断工具,性能诊断工具可以更灵活地控制,测试条件,也不局限于测试平台,PC上也可以进行,那么同时诊断结果也给出了最佳的实践指引,所以开发者就又多了一种根据不同的测试需要来满足测试条件的测试工具了。
在实践中性能诊断工具也能够帮助开发者们更快地发现性能上的问题。举一个例子,比如游戏启动时可能存在比较长的加载时间,我们的诊断报告会给出相应的逻辑优化方向,这其实也正是体现了工具为我们带来的历史经验的留存与复用的便捷性。
性能诊断是开发阶段使用的工具,对应地,我们在游戏上线之后也提供了一个性能监控告警系统,其实这个系统是有它的前身的,我们在很早的时候就推出过一系列的评测指标,以及大家可能都用过的小游戏数据助手,数据助手它的数据很多也很全面,但也正因为这一点,开发者们就很难去判断哪些数据是我要重点关注的,而且在数据发生异常波动的时候,也不能及时通知到开发者。
基于这样的背景,我们就将性能评测指标与数据相结合,推出了性能监控告警系统。那么在基于这个系统下,我们会给出很直观的数值评分,发现问题就会及时地下发给开发者,并及时地解决。在能力试验中我们也得到了一些比较好的反馈,通过能力的介入,我们也发现部分头部游戏的内存突然出现了异常情况,我们也进行了一个及时的建联,并将问题修复,也缩小了问题产生的影响范围。对于工具的使用,大家就阅读底部的指引,我们可以自行查阅。
第三个章节是引擎快适配相关的内容更新,在引擎快适配中,Unity快适配是我们项目组做了一套比较完善的项目,这是一套针对使用Unity引擎设计的游戏,快速接入到微信平台运营的一整套解决方案,相较于游戏公司使用JsScript重塑游戏,这套方案能够给游戏团队带来巨大的转化便捷。
从我们的历史经验上看,转化到微信小游戏平台,将经历上述4个阶段,第一个是可行性的评估,当确定转化的可行性后,我们就使用小游戏转化工具,将游戏转化到我们小游戏平台进行基本内容的检验,随后根据需要我们将平台的能力进行按需接入,最后也是因为原生平台与小游戏平台的差异,我们要进行专项的性能调优。
在过去的半年中,我们再一次对研发效能和性能上都做了不同程度的提升,截至今天已经有超过3000款精致的Unity小游戏,在我们平台运营发布了,给用户带来了非常好的游戏体验。
研效上,我们首先是对wosm分包做了新的升级,wosm分包是优化启动时间,减少游戏内存使用的重要工具,几乎所有的中重度Unity小游戏都要使用该工具来提升运行性能。本次推出的新wosm分包工具,我们对预处理阶段进行了优化,可以大幅度降低单次的处理耗时。同时我们也提供了增量分包自动派出的能力来改善工具的使用。
SDK方面我们也做了一系列的升级,为了降低开发者的适配成本,我们将微信的原生能力桥接到小游戏环境中,比如说我们原来小游戏想使用长链接,需要将原生的Socket化成MicroSocket的协议去实现,那么现在小游戏也是支持原生Socket了。那么此外包括键盘的适配、VideoPlayer我们都已经做到了自适应的能力,进一步抹平了APP游戏与小游戏之间的能力差异。
在转换工具方面我们也做了一系列的能力升级,我们的微信压缩纹理工具目前已经支持了所有的引擎版本,也包括我们中国区的团结引擎。那么在这个工具的背景下,我们也提出提供了首资源包的自动瘦身能力,能够为开发者再一次降低约10%的首资源包体积来加快启动速度,欢迎大家体验。
很多刚转到小游戏的开发者会发现,因为小游戏会时常发生内存崩溃的现象,左边的这张图其实就是一个典型的内存分布图,通常情况下内存会占用超过1G,这在中重度的游戏是很容易发生内存不足而引发的崩溃的。于是我们就分别对编译内存、业务内存和GPU显存三个角度进行专项的性能优化。
在编译内存方面,我们使用新wosm代码分包工具可以降低50%的内存,业务内存方面,我们使用WXAssetBundle和IL2CPP延迟加载方案就可以降低约30%的内存,CPU显存使用微信的压缩纹理工具和我们之前刚刚提到的高性能加模式,最高可以降低80%的内存,而经过这一整套的性能优化组合拳下来,我们让重度游戏的发布成为了现实。
最右边这就是一款典型的重度品类游戏《ob电竞》,大家是可以线上体验来感受一下,经过专项的性能优化后的游戏实际运行效果。
目前已经有超过半数的游戏会使用Unity的通用渲染管线,URP的功能复杂且庞大,但是受限于平台渲染特性的约束,通用渲染管线是无法被完全地高效支持的。那么这就需要开发者逐个项目去定制,工作量是巨大的。基于这样的背景,我们团队就根据实际的情况为开发者定制了一套URP,微信定制的URP,在相同的场景下能够为开发者降低更多的GPU占用率以及首资源包和wasm代码包的体积。
具体的使用大家可以访问我们的文档指引进行查阅。
Unity快适配项目初期,我们为开发者带来了启动封面的能力,通过一张封面图来过渡游戏启动期间产生的等待。然而启动封面它是一个静态且单一的内容,那么这在用户交互上就产生了一段空窗期,这是影响新用户留存的重要因素。
为此我们就推出了一种优化的启动体验新能力,即Unity交互式启动剧情能力。游戏开发者可以将游戏的故事背景和世界观的视频进行前置,让用户更早地进入游戏世界,在播放剧情的同时,并行地完成原本一系列的资源加载,在剧情结束后也就自然地过渡到了游戏的主玩法中。
相比于原启动封面,我们推出的启动剧情能力表现得将更为丰富,支持贴图、视频以及交互能力。
OB欧宝体育电竞官网们在观看剧情的同时,也可以参与剧情的不同发展。欢迎符合条件的开发者与我们去建联接入这个能力。
快速配不止于Unity,小游戏团队希望让更多的团队将他们优秀的作品快速地适配到微信小游戏平台,给大家带来更有创意的内容,我们也持续地对多款游戏引擎进行尝试。
目前我们对Cocos2d-x的适配有了一套较为成熟的方案,我们会提供相应的C++版本的SDK到游戏的工程中,然后通过WebGL Build导出游戏,再结合我们的平台能力配合和Runtime支持就可以发布到我们平台运营了。
我们目前也有很多款优秀的Cocos2d-x作品在我们平台发布,我们可以扫描右边的小程序码进行在线体验,那么有兴趣去了解该能力的开发者,我们稍后会提供相应的界面入口,可以会后咨询。
开发者服务是我们一直都关注的问题,在过去的半年我们又对文档进行了更多的补充,提供了技术手册,从设备硬件平台特性兼容网络等方面,为开发者提供了多种维度的数据参考,让开发者可以快速地做出技术选型。
对于虚拟支付的接入和安全问题,我们都给出了相应的文章指引。在工具方面我们提供了更多的指南,来帮助大家更快更准确地定位与解决问题。
最后是我们推出的小助手,以前小游戏也根据不同的角度都设立了独立的咨询入口,那么我们这一次将这些入口统一地整合到了我们的小助手中,让大家去一站式地解决问题。当然了今天公开课中如果有疑问或者是需要咨询的内容,也可以去联系我们的小助手。
那么今天小游戏技术分享部分到这里其实也就结束了,非常感谢大家的聆听,谢谢。
如若转载,请注明出处:http://www.ashkeling.com/2024/01/536242