《王者之剑2》性能数据精讲

简介:

今天我们为大家带来由蓝港互动研发的3D横版动作手游《王者之剑2》的 UWA测评报告分析。该游戏在各种档次的移动终端设备上,无论是画面表现力,还是性能开销都非常优异。在此,我们将对该款游戏的性能数据进行深度剖析,希望通过这篇文章可以让大家对移动游戏各个模块的运行效率有更为深刻的认知,并对大家的项目研发有所帮助。
请输入图片描述

该游戏目前在App Store已经正式上线,感兴趣的朋友可以通过http://wz.8864.com 一睹为快哦!


CPU性能

该游戏在CPU占用方面的性能非常不错,下图为该游戏在 红米Note2 设备上按照剧情进行游戏时的性能数据。可以看出,在红米Note2上运行的19636帧中,超过33ms的帧数占比为3.2%,超过50ms的帧数占比为1.7%。考虑到切换场景时资源加载的开销,一款游戏如果超过33ms的帧数占比低于10%,则说明该游戏的性能非常优秀,绝大多数时刻游戏运行非常流畅。
请输入图片描述

其整体CPU性能的优秀表现与其各个模块的合理使用是分不开的。接下来,我们就详细讲解一下其CPU性能方面的亮点之处。

一. 渲染模块
通过UWA性能测评报告,我们可以看到该游戏详尽的渲染模块性能开销。该游戏在红米Note2设备上运行时的渲染模块CPU开销如下图所示。通过统计,半透明物体渲染的CPU消耗均值为2.6 ms,主要集中在0.5~6.8ms范围内(5%~95%)。不透明物体渲染的CPU消耗均值为1.5 ms,主要集中在0.2~4.3ms范围内(5%~95%)。Draw Call峰值为158,且主要集中在27~119范围内(5%~95%),属于合理范围之内。
请输入图片描述

通过下图可以看出,Draw Call与Triangle的走势基本一致,在Draw Call或Triangle数值较高处,均为战斗副本中的怪物较多时出现。纵观整个游戏运行走势图,Draw Call、渲染Triangle的开销均处于合理范围之内。
请输入图片描述

二、物理模块
在UWA测评报告中,该游戏运行时的物理模块CPU开销如下图所示。可以看出,Physics.Simulate的CPU占用主要集中在1ms以下,该值处于合理范围之内(一般建议在3ms以下)。
请输入图片描述

物理模块的高效性能取决于对碰撞、Contact数量的控制得当。从下图可以看出,在游戏运行过程中,Contacts数量全部为0。同时,Active Rigidbody的数量峰值为0,碰撞体的数量峰值低于60,均处于合理范围之内。对此,建议大家时刻关注UWA测评报告中Contacts数量、Rigidbody和碰撞体数量的变化,通过对应的项目截图来判定数量高值处是否合理。
请输入图片描述

三、UI模块
该游戏在红米Note2设备上运行时的UI模块CPU开销如下图所示。该游戏使用NGUI作为UI界面的解决方案。经过统计,UI模块总体的CPU占用均值为1.8 ms,主要集中在0.1~3.5ms范围内(5%~95%)。堆内存累积分配45.7MB,平均每帧分配堆内存2.4KB。该值略高,一般我们建议平均每帧堆内存分配尽可能控制在2KB以下。
请输入图片描述

从下图中可以看出,UI堆内存的主要分配来自于UICamera.Update。该函数一般负责处理UI界面的点击操作,而一次分配较高内存,说明此处存在Instantiate实例化UI界面的操作。通过进一步查看Instantiate的详细调用开销,果然可以查看到UICamera.Update下存在较高的性能开销。
请输入图片描述

如果你的项目中也存在类似的开销,可根据UI界面使用频率的不同尝试以下方案:

1、如果该UI界面开启的频率很低,可考虑直接通过Instantiate/Destroy来进行切换;

2、如果该UI界面使用较为频繁,可尝试通过Active/Deactive来代替Instantiate/Destroy操作,从而降低UI切换时的性能开销;

3、如果该UI界面使用非常频繁,则可尝试直接改变UI界面位置的方式来移进/移出相机视域体,从而来极大提升UI界面的切换效率。

同时,关于UI界面的使用频率,这个本身没有明确的固定标准,需要大家根据自己项目的需求来进行规定。比如,通过检测游戏项目一天中UI界面的点击率来进行规划等等。


内存模块

《王者之剑2》在内存上的表现如下图所示。总内存峰值达到243MB,Mono堆内存峰值为28.2MB,且内存在游戏运行过程中表现较为平稳。243MB的总内存分配相对来说略高,研发团队可尝试在低端机器上对资源进行进一步控制,从而降低低端机器上的内存占用。
请输入图片描述

一、Mono堆内存
从上图可知,该游戏的总体Mono堆内存控制得很好,在19635帧中,Mono的堆内存峰值仅为 28.2MB。该值属于合理范围之内(<40MB)。

请输入图片描述

如此少量的Mono堆内存分配,主要得益于项目中函数堆内存分配控制得当,下图为当前游戏运行19600+帧的函数堆内存分配情况。因此,建议大家对函数代码堆内存的分配进行严格控制,对于堆内存分配较高(10000帧10MB+)的函数进行详细定位其分配原因。在UWA测评报告中,我们提供了堆内存分配Top10的具体堆栈,以方便大家尽快地定位堆内存分配出处。
请输入图片描述

经过进一步定位,该游戏在运行时Instantiate实例化操作造成较高的堆内存分配(总共累积37MB+)。因此,建议大家在查看项目报告中密切关注Instantiate实例化操作的性能开销,降低Instantiate/Destory的调用频率,将有效降低其堆内存的分配。

二、资源内存
经过统计,该游戏的纹理资源数量峰值为350个,内存占用峰值38.2MB。在全部纹理资源中,ETC1和ETC2格式纹理占有242个,Alpha8格式纹理占有9个,RGBA32和ARGB32格式纹理共占有44个,RGB24格式纹理占有18个,其余为RGBA16格式纹理。
请输入图片描述

对于RGBA32、ARGB32、RGB24和RGBA16格式的纹理,我们建议在视觉效果可以保证的情况下,尽可能使用ETC1格式纹理(Android平台)进行替换,不仅可以达到更小的内存占用,同时可以获得更快的加载效率。对于纹理资源的加载效率,我们在之前的Unity加载模块之纹理篇中进行了详细的分析和阐述,建议大家进一步查看,来加深对加载模块的掌控能力。

其他资源的内存占用情况如下:
Mesh资源:
请输入图片描述

AnimationClip资源:
请输入图片描述

以上则为《王者之剑2》游戏在CPU性能和内存管理方面的具体使用情况。优秀的CPU性能、较低的堆内存分配以及引擎模块间的合理使用,足以说明该研发团队具备非常深厚的技术功底和对于引擎相当优秀的把控能力。

同时,该游戏在资源实例化和加载模块方面仍有一定的提升空间。在此,我们对其进行罗列,希望同样可以帮助到大家的研发项目。


性能优化、进无止境

一、Instantiate实例化
目前,游戏的战斗副本中Instantiate实例化的频率较高,如下图所示。较高频次的Instantiate/Destroy操作会造成一定的内存碎片,从而造成GC的加速到来。

请输入图片描述
对于频繁的Instantiate调用,我们的建议如下:

1、对于一般的GameObject(比如技能特效、怪物角色等),可将其放入缓存池并通过Active/Deactive来进行切换;

2、对于使用频率较高的UI界面,则可通过直接改变Transform的方式来移进移出相机视域体,可以得到更加高效的性能。

二、加载模块
该游戏在运行过程中,非切换场景处存在较为频繁的Loading.UpdatePreloading CPU占用,如下图红框中所示。经过进一步分析,红框中的CPU占用为UI界面开启/关闭时的Resources.UnloadUnusedAssets API函数调用开销。对此,建议研发团队密切关注加载模块中Resources.UnloadUnusedAssets的调用频率,尽可能避免较短时间该函数的重复调用。对于长时间停留在一个场景中的项目(比如MMO游戏)来说,可尝试间隔一定时间(比如15分钟甚至更长时间)来主动触发一次Resources.UnloadUnusedAssets。
请输入图片描述

以上则为该项目在后续研发中可进一步提升性能的主要方面。在我们测评过的项目中,Instantiate实例化和Resources.UnloadUnusedAssets操作调用频率过高等问题也是绝大多数研发团队遇到的共性问题。希望以上的讲解对大家的相关问题有所帮助。

最后,非常感谢《王者之剑2》研发团队对 UWA 的认可和支持。





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
6月前
技术人修炼之道阅读笔记(一)让自己更值钱的5个能力
技术人修炼之道阅读笔记(一)让自己更值钱的5个能力
|
7月前
|
设计模式 SpringCloudAlibaba 负载均衡
每天打卡,跟冰河肝这些项目,技术能力嗖嗖往上提升
前几天,就有不少小伙伴问我,冰河,你星球有哪些项目呢?我想肝你星球的项目,可以吗?今天,我就给大家简单聊聊我星球里有哪些系统性的项目吧。其实,每一个项目的价值都会远超门票。
102 0
每天打卡,跟冰河肝这些项目,技术能力嗖嗖往上提升
|
5月前
|
安全 Java 虚拟化
涅槃重生!字节大牛力荐大型分布式手册,凤凰架构让你浴火成神
从大型机到单体架构,从微服务架构到无服务架构,每一次架构模式的演进都是一次涅槃。每一个软件系统都是由大量服务构成的生态体系,个体服务的“死亡”和“重生”是整个系统能否持续可靠运行的关键因素。笔记从5个方面全面剖析了如何构建一个可靠的分布式系统,同时给出了Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda五种架构风格的样例工程。
|
6月前
|
缓存 运维 NoSQL
“阿里味”的「Redis核心实践全彩手册」给你,还学不会就转行吧
面过大厂资深技术岗的人都知道,Redis 基本上是必考点。比如: · Redis 常见的性能问题有哪些?该如何解决?——性能相关 · Redis 缓存的雪崩、击穿、穿透到底是什么意思?如何应对?——缓存相关 · Redis 主从集群常见的问题有哪些?该如何解决?——可用性相关 · 现有 Redis 实例,保存数量 6GB,未来预计会扩展到 32GB,请你提供一个解决方案,并分析它优点和潜在问题?——可扩展性相关
|
7月前
|
消息中间件 缓存 Java
牛掰!阿里人用7部分讲明白百亿级高并发系统(全彩版小册开源)
高并发 提到“高并发”相信你们应该都不会感到陌生!此时你脑中应该会浮现好多有关高并发的:业务急剧增长、电商购物、电商秒杀、12306抢票、淘宝天猫各种活动等;都是需要用到高并发的,那么如何去设计一个高并发系统抵挡这些冲击呢? 其实这也是一道很常见的面试题,但是大多数应聘者都不知如何回答,从何答起。对于一个Java程序员来讲,,更关注的是不是系统架构层面的呢?从原本的定时秒杀,到现在各种活动的预热、拼团、定金膨胀、百亿补贴、跨店满减以及更复杂的组合优惠,让用户摸不到头脑,虽然这些都扰乱了用户购买的节奏,但是也一直保持着持续升温的状态。
|
10月前
|
设计模式 缓存 Java
吃透阿里2023版Java性能优化小册后,我让公司系统性能提升了200%
性能优化可以说是很多一线大厂对其公司内高级开发的基本要求(其中以Java岗最为显著)。其原因有两个:一是提高系统的性能,二是为公司节省资源。两者都能做到,那你就不可谓不是普通程序员眼中的“调优大神了”。 那么如何成为一名“调优大神”呢?
|
存储 运维 NoSQL
架构初探——谁动了我的蛋糕|青训营笔记
笔记内容较为提纲挈领,课程帮助我们开阔了后端架构的视野,但这部分的知识也着实需要结合实践去消化,目前于我来说难度较大,确实只能说是初探架构。
67 0
架构初探——谁动了我的蛋糕|青训营笔记
|
消息中间件 存储 缓存
监控界的最强王者,没有之一!(3)
监控界的最强王者,没有之一!(3)
187 0
监控界的最强王者,没有之一!(3)
|
消息中间件 SQL 监控
监控界的最强王者,没有之一!(2)
监控界的最强王者,没有之一!(2)
110 0
监控界的最强王者,没有之一!(2)
|
存储 Prometheus 监控
监控界的最强王者,没有之一!(1)
监控界的最强王者,没有之一!(1)
128 0
监控界的最强王者,没有之一!(1)