关于手游:Unity中基于前缀树的高性能红点系统实现

文章次要介绍了红点零碎的特点,如何基于前缀树这一数据结构实现红点零碎,提出了相干实现中存在的两个性能问题,以及如何去解决这两个问题,并在最初基于UnityEditor的TreeView开发了树视图窗口,不便使用者在开发阶段的Debug需要。 红点零碎是在大部分游戏中都能看到的常见需要。 其作用在于,在玩家达成某种条件时(如新取得某个配备、道具数量达到某个需要),在相干的UI上亮起红点来提醒玩家进行相干操作。 红点零碎的一个鲜明特征即是它的“层层套娃”性,子界面亮起红点时其父界面也须要同时被亮起红点,始终点亮到主界面为止。 以下图为例,当某个特定的主线章节亮起红点时, 其父界面的主线章节按钮和出击页签也须要被亮起红点。 最初主界面上的出击按钮也会亮起红点来最终达到提醒玩家的目标。 如此层层嵌套下来,如果不对父子红点进行对立的触发治理,而是让负责各个模块的程序员各自治理,必将导致各个模块的红点触发逻辑难以保护且性能堪忧的后果。 而针对红点零碎这种非常强调父子关系的业务需要,应用“前缀树”进行治理将是十分好的抉择。 那么何为前缀树呢? 前缀树实质上是一种多叉树,树节点存储了字符,具备雷同前缀的字符串将具备雷同的父节点,在进行字符串保留和查找时具备较好的性能劣势。 通过将红点形象为门路,只须要稍加批改,让节点中存储对应的门路字符串和节点值,便能够不便地实现红点零碎。 以之前的图为例,笔者将每一层UI都依其父子关系设置为树中节点,最终只须要点亮门路为MainAttack/Attack/Chapter/18的节点,便能够同时亮起其所有父节点对应的UI的红点。 而当叶子节点的红点被暗藏时,其所有父节点也会自动检测所有子节点状态来决定是否暗藏本身的红点。 应用前缀树来实现红点零碎天然并非笔者的独创,但目前为止网上能找到的相干材料中往往存在两个性能痛点: 在解决门路时间接应用split办法进行字符串暴力切割,导致造成额定的内存调配。在子节点状态扭转后须要也扭转父节点状态时不进行限度,多个子节点同时扭转将导致额定的无用刷新。笔者在后续章节对红点零碎的具体实现中,便试图解决这两个痛点,并开发一个编辑器下的红点树可视化窗口,辅助使用者对红点零碎进行Debug。 课程最初会提供蕴含残缺代码与测试用例的Demo工程不便读者学习。 返回课程:《Unity中基于前缀树的高性能红点零碎实现》

September 10, 2020 · 1 min · jiezi

关于手游:UWA发布|Unity手游性能蓝皮书

作为游戏行业的服务商,UWA不仅为游戏开发者提供高效的性能优化工具,也致力于为行业提供更全面、更具体的信息和服务。为此,UWA明天公布2019-2020年度手游蓝皮书,从总体性能数据、引擎各模块开销、内存占用等方面进行汇总剖析,出现Unity手游行业现状。 这是侑虎科技原创文章,欢送转发分享,未经官网受权请勿转载。如果您有任何独到的见解或者发现也欢送分割咱们,一起探讨。(QQ群:793972859) MMORPG作为目前游戏市场上的头部力量,在UWA测评过的我的项目中,也占据了次要份额,因而咱们以该类型的测评数据为例,为大家出现2019-2020年的手游性能现状和发展趋势。 报告目录: 1)MMORPG手游总体性能开销剖析 2)MMORPG手游CPU模块性能开销剖析 3)MMORPG手游内存模块性能开销剖析 4)MMORPG手游资源管理剖析 5)UWA对于MMORPG手游研发团队的倡议 ◆◆◆◆◆ MMORPG手游总体性能开销剖析 Android设施的CPU均值主体范畴为14.7~78.9 ms,且次要集中在17~33ms和33~50ms两档。依照UWA官网(www.uwa4d.com)的测评机型分类,咱们将统计的性能数据分为低端、中端和高端;在趋势图中则间接以最具备代表性的低端和高端来展示。 大部分MMORPG手游在中低端设施的性能开销较高,大于33ms的耗时占比范畴在60%~70%。 无论是高、中和低端的Android设施,渲染和逻辑代码都是须要研发团队重点关注的,它们的耗费总和占了总开销的近70%。逻辑代码的耗时占比仍然很高,这次要与角色、怪物的数量越来越多相干。随着其一直减少,逻辑状态的更新开销、AI开销等都在大幅减少,这是须要游戏研发团队中亲密关注的耗时瓶颈。上面咱们就来具体分析这些支流模块的开销状况。 ◆◆◆◆◆ MMORPG手游CPU模块性能开销剖析一、渲染模块重大水平:天堂 为了可能更好地反映出各个性能参数的整体应用状况,咱们统计了每种性能参数的主体应用范畴,其范畴区间是[5%~95%],以下数据中P5代表5%,P50代表均值,P95代表95%。 在过来的4个季度中,半透明渲染和不通明渲染在低端设施上的CPU耗时在一直降落,Q2略有回升,这意味着游戏团队对于引擎渲染模块的了解越来越深刻。 二、逻辑代码重大水平:天堂 1)GC触发频率很高,是造成卡顿的次要起因之一,目前只有36.8%的我的项目能够将GC的触发频率管制在1000帧/次以上。 2)随着MMORPG游戏越来越重度化,GC均匀耗时在逐渐回升。GC耗时会逐步成为游戏运行时的支流性能杀手,须要研发团队时刻留神! 咱们能够看到,在过来的Q2中,Instantiate调用频率有显著降落,这阐明大家在我的项目中一直器重对于资源Instantiate/Destroy的治理。如果大家的我的项目中仍有大量的Instantiate/Destroy调用,那么咱们建议您着重查看UWA线上性能报告中资源管理分类的“资源实例化/激活”页面,通过它能够疾速把握到底具体哪些GameObject在不停地被执行实例化操作,从而更为高效地缩小不必要的性能开销。 Shader.Parse 操作是比较突出的性能杀手,但咱们看到在2019的Q4中曾经大幅度降落,目前均匀每次调用的CPU耗时次要散布在 0.8~74.9 ms。三、UI模块重大水平:天堂 目前咱们次要统计了NGUI、UGUI和FGUI的占比以及具体的应用状况。在刚刚过来的四个季度中,UGUI的应用占比仍然强势,最高时可达72%。NGUI的占比有显著降落的趋势,而FGUI有显著上涨的趋势。 上面咱们将别离阐明它们的CPU耗时和堆内存占用状况。 UI模块的性能开销仍然很高,但相较于去年相比的确有进一步晋升。这次要是在这一年多以来,各大研发团队对于UGUI的了解和把握都在不断深入。当然,当初UGUI的显著性能问题次要有以下四方面: 1.Draw Call; 2.重建; 3.OverDraw; 4.主线程阻塞。针对以上问题,大家能够通过UWA学堂(https://edu.uwa4d.com)中UI相干的相干技术问题和视频进行学习和理解,置信对帮忙大家疾速晋升UI方面的技术了解大有裨益。 FGUI的性能看起来很不错,然而目前FGUI的使用量较少,可能存在一些统计偏差。仅供参考。 四、动画模块重大水平:一般 动画模块在最近一年来的性能体现始终较为安稳,这阐明大家对于动画模块中应有的性能优化点把握曾经较为到位。尽管MMO我的项目中的角色、NPC和怪物等数量继续有在减少,但在这些模型少数是通过GPU Skinning的形式来实现。这种形式对于实现场景中的大量同种怪物十分无效。五、物理模块重大水平:一般 物理模块的性能存在回升趋势,特地是高端设施上。对于应用Unity 2017.4版本当前的团队,Auto Simulation和Auto Sync Transforms是大家须要关怀的参数,以防止不必要的性能耗时。六、粒子模块重大水平:一般 ...

September 10, 2020 · 1 min · jiezi