经验分享:《节奏大师》UI优化历程
《节奏大师》是一款国民级的音乐游戏。撰写本文时,恰逢《节奏大师》三周年生日。2012年5月25日,《节奏大师》首次发布,吸引了众多玩家。时隔一年多,作为第三个登陆微信平台的腾讯自研游戏,《节奏大师》上线后迅速积累了大量用户。然而,随着用户数量的急剧增加,加之当时手机游戏开发技术尚不成熟,一些问题隐患在游戏上线后逐渐暴露出来。
游戏性能基线与核心体验要求
由于《节奏大师》是一款国民级音乐游戏,在客户端一侧,其性能基线设置得非常低。这意味着游戏需要能够在各种设备上运行,无论是高端设备还是低端设备,都要确保在低端机上运行时不会出现过多的崩溃现象。
此外,客户端还必须保证游戏的核心体验——打歌过程流畅。《节奏大师》的核心玩法对帧频稳定性要求极高,绝对不能出现“突然卡一下”的现象。因为一旦出现卡顿,将极大地影响玩家的极致体验。经过测试,如果游戏帧速低于50,就会对核心体验产生影响,这与SLG等其他类型游戏不同,SLG游戏中间偶尔卡顿一下对游戏体验影响不大。
内存问题的发现与定位
游戏上线一段时间后,《节奏大师》出现了一个严重的问题——内存占用过高。游戏启动后,常驻内存非常大,而内存问题会带来一系列隐患,如增加崩溃率、影响CPU运行效率等。经过开发团队的一系列排查,最终定位到问题所在:UI贴图资源占用过多。
《节奏大师》的UI贴图资源主要应用于以下几个方面:
- UI显示,即平时看到的按钮、面板等图片资源。
- 打歌时的Note资源、特效资源等。
根据测试,发现内存占用情况如下: 对游戏内存占用情况进行持续跟踪,结果显示:启动游戏后进入主界面,内存约为100M;不断切换界面时,内存几乎保持不变;开始打歌游戏时,内存略有上涨;退出打歌后,内存没有明显变化。
《节奏大师》的UI采用环形结构,每个UI都是独占的。理论上,当从一个UI切换到另一个UI时,之前的界面应该从内存中销毁。但从测试结果来看,似乎并没有进行销毁操作,导致游戏初始内存偏大,界面切换时内存也无明显变化。同时,我们梳理了目前UI图集的组织关系,发现每个UI引用了多张贴图,UI与贴图之间没有明确的对应关系,缺乏合理规划,这也印证了内存占用过高的现象。
现有UI组织架构的问题
目前这种UI组织架构会带来严重的问题:
- 后续开发隐患:内存无法得到有效控制,增加了崩溃率。《节奏大师》用户数量众多,低端机用户面临较大风险,这对产品本身造成了很大伤害。
- 引擎不成熟:引擎未考虑图集释放,UI关闭时没有释放贴图的逻辑。
- 工具端操作繁琐:UI操作复杂,增加了开发难度。
- UI引用关系复杂:UI引用关系混乱,难以控制。以往美术人员采用手工方式将小图拼贴成大图,并手工切割sprite,导致切割不精确,存在误差。
优化方案与步骤
针对上述问题,主要从以下几个方面进行解决:
- 重新整理所有的Atlas图集,使每个UI仅对应单一的图集。
- 整理出公共的Atlas图集。
- 修改所有的UI文件,将其中的sprite重定向到最新的sprite。
具体步骤如下:
- 切割原始的大贴图,将其拆分为小图,这些小图即为美术人员最初制作的素材。
- 扫描原始的UI文件,收集每个UI使用的sprite(小图),并将其归类到对应的文件夹中。例如,将背包UI使用的小图归类到背包UI文件夹下,从而生成多个目录,每个目录对应一个UI,目录下包含该UI使用的小图。
- 扫描公共sprite小图,将被UI使用N次(N值需反复测试调整)的小图收集起来,定义为公共Atlas图集。
- 将各个UI目录和公共图集目录重新打包成大图,并生成最新的Atlas配置文件。
- 将原始UI文件(即UI配置文件)中使用的sprite配置重定向到最新的Atlas配置下的sprite。
通过上述步骤,对原先的贴图资源进行重新拆分合并,对UI配置进行统一修改。最终实现了每个Atlas配置仅对应一张贴图,每个UI仅使用自己的Atlas贴图和公共贴图。理论上,在某个界面下,内存中的UI贴图资源最多只有两张1024 * 1024的图片。相比之前进入一个UI需要加载10来张贴图的情况,该方案是必要且有效的。
代码处理与优化目标
上述优化工作主要通过工具完成,在项目代码中也需要进行相应处理,此处不再展开。通过这些修改,主要达成了以下几个目标:
- 优化美术工作流程:美术人员只需为程序提供每个小图,无需再手动拼贴大图和划分sprite。以往大图是人工拼贴,sprite信息也是手工切割,存在较大误差。
- 规范程序开发调用规范:通过断言约束每个UI的加载和释放过程,确保避免不必要的错误。
- 控制贴图资源数量:确保主玩法以外的独立场景仅使用1 - 2张贴图资源,主玩法使用6 - 7张贴图资源。
优化结果与总结
优化后的结果令人满意。也许有人认为这种优化方案在当前项目中已经非常普遍,如使用工具打包贴图资源、每个UI对应固定独立的贴图等。但由于《节奏大师》项目起步较早,在手游领域探索过程中,受到工具引擎端不成熟和人为操作不严谨等因素的影响,问题逐渐放大,几乎难以控制。此次优化工作历时约三个星期,涉及所有的UI文件和UI贴图,工作量巨大。最后,展示几张优化过程中的成果图片:
- 这是当初用工具扫描老UI时,每个UI涉及的贴图情况,令人触目惊心。
- 这是当初开发的工具,界面略显杂乱。