更新!!!Unity移动端游戏性能优化简谱

news2024/11/26 18:43:54

UWA官方出品,结合多年优化经验撰写了《Unity移动端游戏性能优化简谱》,文章从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能检测工具确定和解决这些问题。

(1)性能优化的基本逻辑

前言中简单论述了“确定问题-解决问题-持续监控问题”这一既是层层递进、同时也密不可分的逻辑;践行游戏研发“工业化”的UWA尝试在其中的每一个步骤都提供优良的解决方案。

(2)UWA性能检测工具

图文兼备地展示了UWA性能检测工具在确定和解决性能问题过程中的易用性、可靠性。

(3)常见性能问题

如图,文章从内存、CPU、GPU三个维度讨论了当前游戏项目中经常出现的一些性能问题作为参考。

文章自2022年推出以来备受游戏开发者瞩目,并于近期进行了重大更新!不仅在内存问题排查和GPU性能分析两方面做出了大幅调整和更新,更完善了优化知识体系和方法论。此外,还针对其他部分进行了修正和调优,让你更轻松地掌握性能优化的核心原理和方法。

无论你是初入行业的开发者,还是经验丰富的大佬,这本简谱都将成为你的得力助手,帮助你解决各种性能优化难题,提升性能表现,助你一臂之力!


目录

1|前言

2|分门别类地控制运行时内存

3|以模块思维划分的CPU耗时调优

4|达到GPU压力与画面表现间的平衡


本篇转载自《Unity移动端游戏性能优化简谱》的第1节。

1.1 玩家眼中的游戏性能

任何一个玩家在游玩游戏过程中都会碰到类似的疑问:为什么我玩一段时间就会闪退?为什么我的游戏这么卡?为什么我的硬件这么烫?为什么移动设备电量下得这么快?

对于玩家而言,无关手里这款游戏本身的美术是否精良、玩法是否有趣,当上述这些疑问出现时,其游戏体验会自然而然地变差,并不可避免地导致黏性下降。这是每个游戏开发者都不想看到的结果。

而实情是,对于如今的移动端游戏市场而言,国内市面上各类硬件机型性能跨度很大;如果项目要支持海外市场,则往往项目所要承担的性能压力更大。那么,如何让持有不同硬件设备的玩家,尤其是通过中低端设备接触到我们游戏项目的玩家也能顺利流畅地体验游戏内容,就是我们今天讨论的主要话题。

1.2 开发者关注的游戏性能

在游戏项目的开发过程中,一个非常常见的现象是:研发团队在新项目的中前期往往把全部精力投入到实现功能中去,而忽略了性能优化的工作;到了游戏中后期甚至临近上线的时候进行测试,才发现项目充斥着大量严重的性能问题、影响到了游戏的正常体验,但却不知道从何改起、时间非常窘迫;再到上线后,受到大量玩家对性能的负面反馈,留存数据也受到影响。

足以见得,性能问题是一款游戏项目重要的生命线,需要开发者树立良好的优化意识和优化知识体系,才能让项目少走弯路。

和玩家视角不同的是,像闪退、卡顿、发热、耗电这种感官层面的性能问题,UWA认为在开发者的视角中应该将其主要分类为内存、CPU、GPU三个大类的问题。本文的主要内容旨在围绕三个大类的常见典型问题进行例举和讨论,从而形成一份Unity移动端游戏性能优化方法论的简谱。

那么,既然已经发现了若干性能问题,如何排查确定问题和解决问题就成了最关键的两个步骤。

1.3 如何确定问题

发现了性能问题后的第一大步骤就是确定问题。

举例而言,我们的游戏项目运行时间一长就会闪退,是因为我们的缓存策略做的不好或者存在冗余现象,导致内存不断上升造成的闪退?还是因为我们的美术资源内存控制的不好,几个较大的资源就轻易把整体内存给撑大了?

又或者我们发现一个游戏场景卡顿严重、帧率很低,是因为这里的同屏渲染面片数和DrawCall数都太高导致渲染模块压力大?还是因为此处的UI过于复杂且变化频繁造成的更新耗时?

还或者我们感到手里的手机烫的惊人,是不是因为当前场景GPU压力过大,我们在当前机型上做的分级策略并不合适?

以上只是众多千奇百怪层出不穷的性能问题中的寥寥几点。后文还将详细讨论一些比较常见的问题。总之,确定问题的工作本身也是一项挑战。

1.3.1 计算机语言/图形学/游戏引擎知识

知识和经验无疑是一个开发者在优化项目性能时最宝贵的武器,不断地学习和更新也是每一个程序员武装起自己的过程。完善而饱满的知识自然不仅仅有利于确定问题,同样有助于解决问题。放在这里说是因为它是我们有能力着手优化工作的重要前提。

除了查看各类工具源码和文档、跟踪工具更新内容、翻阅大牛撰写的书籍、浏览各类技术论坛和博客等等以外,也可以在UWA的技术社区中找到很多优质内容。

UWA 学堂:持续更新各类优质课程,内容从某些开发工具的入门和使用到某个引擎模块的机制原理详解;从最新的移动端游戏技术实践到精品项目案例讲解等等。还邀请了众多具有多年从业经验的业界大佬和著名游戏公司合作伙伴撰稿,涵盖面广、质量颇高。更令人振奋的是,受疫情影响沉寂了一段时间的UWA DAY,今年将重新回到大家的视野,与广大开发者在线下见面,敬请从官网、官方微信等渠道关注最新消息。

UWA问答:帮助开发者找到更好的答案。是游戏开发者们日常沟通交流技术问题的良好平台。在这里你对游戏制作方方面面的任何问题,都能够得到讨论或解答。通过最直接的技术交流来少走弯路、获得经过实践检验的开发经验,让确定和解决问题的过程变得简单许多。

UWA开源库:帮助开发者发现更好的解决方案。不断更新和整合了各种来源的开源项目,翻译完毕、分类清晰、图文并茂,为开发者提供了更加方便地搜索发现和获取开源资源的渠道。

UWA Blog:包含UWA精选的各类技术文章、提醒学堂优质内容上新、整合问答优质问题、介绍UWA产品和其更新等各类UWA社区动向。

1.3.2 多种多样的辅助工具

工欲善其事必先利其器。使用工具获得直接精确的性能数据,能更加直观地反映出性能瓶颈,从而达到事半功倍的效果。

随着业界的发展和成熟,各大引擎、IDE和硬件厂家都推出并更新着自己的性能分析辅助工具,也有不少开发者或团队喜欢根据自身项目的情况开发自己的性能监控插件。

以引擎而言,Unity Profiler是很多开发者都会用且在用的工具,可以记录并查看CPU/渲染/UI/内存等各模块的实时消耗参数;此外,Unity还衍生出Frame Debugger、Memory Profiler等越来越成熟有用的编辑器性能分析工具。

以IDE而言,Windows、MAC OS/iOS、Andriod平台都分别有适用的工具,如Visual Studio的性能探查器、XCode的Instruments、Android Studio的Profiler等。

以硬件而言,SnapDragon Profiler、XCode Metal Frame Capture、Mali Graphics Debugger等种类就更多了,不一一赘述。

总而言之,根据开发者的使用熟练度、不同硬件平台的兼容性、工具功能的覆盖面等等因素,开发者在挑选合适的性能优化辅助工具时很容易挑花眼。

1.3.3 UWA工具

那么有没有一款简单易用、兼容性强、功能全面的性能优化辅助工具呢?

当然有啦——

UWA GOT Online工具可以通过UWA提供的SDK快速集成到测试项目中,在真机上完成测试流程后,在极短的时间内完成数据的上传和解析,从而自动生成一系列可视化的图表。与此同时,还基于UWA丰富的优化经验和庞大的数据库进行评分,根据各个性能模块提供针对性的分析建议和性能参数的变化趋势。

不仅如此,UWA还提供了GPM、GOT、真人真机测试服务、在线AssetBundle检测、本地资源检测、Pipeline、GPM 2.0、深度优化驻场等工具或服务,从不同维度满足开发者的优化需求。

1.4 如何解决问题

性能的第二大步骤就是解决问题。在有了知识经验和上述工具的加持下,我们的项目越是复杂、越是来到后期,就越是会面临一条长长的优化问题清单。在有限时间里合理地规划并缩短这条清单,就是我们面临的下一项挑战。

1.4.1 优化工作优先级

在进行具体的优化工作前,合理的规划往往能节省大量总体时间。

规划工作的第一点就是要抓住问题的主要矛盾。在一条长长的优化清单中,把每一项条目并行地、完全地优化完毕往往是不现实的。此时就需要重新整理这份清单,按照优先级重新进行排序,为优化性价比更高的问题投入更多。

对于优先级的判断,UWA认为主要参考两点:一是重要性,如果一个问题对当前场景的性能压力影响远大于其他因素、显然是主要矛盾,如果不予修正很难维持正常的游戏体验,那么就应该投入更多的人力时间集中优先解决;二是易操作性,如果一个问题造成的性能压力相对来说并不大,但只是耗费极少功夫的举手之劳,比如只是在引擎设置中关闭一个开关,就应该优先把它改掉。

1.4.2 性能和效果的权衡

第二点则是一种取舍,针对资源和渲染等部分的优化往往会影响到游戏的表现效果。为此,程序员往往需要和策划、美工同事加强沟通,在两者之间找到一个平衡点。这种平衡是一种动态平衡,需要结合实际情况操作。比如,一款吃鸡游戏画面变化频繁、且需要流畅的联机战斗操作,那么对表现的要求可以适当低一些;而一款养成类游戏把精美的角色作为卖点,其模型和动画就需要非常精致,而牺牲一部分性能。哪怕在同一款游戏中也可以在过场动画和角色展示界面中注重表现,而在战斗场景中关注性能,需要具体问题具体分析。

总的来说,游戏项目的优化最终目标是能够在玩家硬件上顺利运行,而为此放弃很大一部分表现效果,也是大多数开发团队的实际选择。但,UWA在大量的项目优化实践中发现,往往很多对表现并无贡献、属于完全浪费地性能问题占据了相当大的比例,优先解决这类问题的优先级显然要更高。

1.4.3 分级策略和制定标准

第三点,在每一类机型上都达成上述的平衡就是我们的分级策略。我们大可以在高端机乃至旗舰机上开启后处理、使用高分辨率高模;但在中低端机型上则使用另外一套标准。

制定分级策略同样需要我们根据项目类型调整。更细节准确的分级还应参考项目发行目标市场的硬件机型和同类游戏的分档经验,具体可以参考文章《基于移动设备算力的UWA性能标准系统上线》。

另外,开发团队还最好制定一套详尽合理的标准来管理约束整个开发流程。最常见的就是制定美术资源标准,从而极大程度避免内存问题的失控。Unity还提供了回调函数在资源导入时就进行归一化设置,具体也可以在UWA学堂中找到相关课程《自动化规范Unity资源的实践》。

1.4.4 UWA建议

规划完毕后就来到了具体的优化工作。这个工作冗长且需要耐心,而UWA很乐意在这个过程中继续提供帮助:

你当然可以在UWA社区中寻找方法,或者是在UWA工具的自动化报告中找到解决方案。你还可以联系UWA工作人员,从而提供真人真机测试报告1对1讲解服务或者是更进一步地深度优化服务。UWA的引擎技术团队将对游戏项目进行更加详细的诊断和建议。

1.5 如何持续监控性能

在迈出了性能优化的前两步后,很多开发团队都想要或者尝试走出第三步,也就是持续监控性能的这一步。

为此,一些团队安排专门的引擎优化人员、开发自己的DevOps工具。当在团队内部逐步形成较为成熟的相关体系后,将节省项目后续开发维护的成本,并可使经验延续到其他新项目中,大大提升开发效率。

而另外一些团队则有在游戏上线后继续监控性能的必要。

1.5.1 UWA Pipeline

针对这些需求,UWA推出了UWA Pipeline。它是一款面向游戏开发团队的本地协作平台,旨在为游戏开发团队搭建专属的DevOps研发交付流水线。

UWA Pipeline主要包括:

1. 专属的DevOps研发交付流水线

2. 私有云真机远程调试

3. 可视化配制自动测试

4. Pipeline内快速创建UWA服务

5. 支持远程构建

五大功能,提供了专为游戏设计的DevOps研发交付流水线,且集成了各项UWA工具和服务,构建简单、操作便利。更多详细信息欢迎点击下文了解。

《速成,掌握UWA Pipeline 功能和使用方法》

《UWA Pipeline的使用与自动化流水线的搭建详解》

1.5.2 UWA GPM 2.0

UWA持续吸取各个开发团队对于性能监控方面的需求,发现游戏上线后玩家端的性能情况在很多时候具有无可替代的参考价值,协助开发者发现许多在研发迭代、Development包阶段难以发现的诸多性能问题,从而指导开发团队后续的性能优化方向。

GPM 2.0是一款基于UWA Pipeline、面向游戏开发团队的游戏运行性能监测平台,旨在帮助游戏开发团队监控和分析游戏项目上线后玩家真实的性能运行情况,及时发现并解决游戏性能问题,进而提升玩家游戏体验。

主要提供:

1. 游戏宏观性能指标的分钟级实时监控

2. 根据游戏版本、游戏场景、硬件设备分级的数据聚合分析与对比

3. 可自由配置的性能异常场景次数统计

4. 具体到玩家的深度性能数据分析

5. 游戏运行的硬件信息统计


以上就是《Unity移动端游戏性能优化简谱》的第1节,此篇文章比较适合有一定Unity引擎知识和开发经验,从事Unity性能优化的技术人员;需求高效精准的性能优化工具、提升优化工作效率的开发者以及对游戏研发“工业化”理念感兴趣,想要系统性地建立优化思维的读者。

读完全篇后你会获得:

1、了解如何使用UWA工具发现和确定性能问题;

2、了解常见的性能问题和其解决办法;

3、上述内容的图文并茂的直观展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1625833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang特殊init函数

介绍 init()函数是一个特殊的函数&#xff0c;存在一下特性 不能被其它函数调用&#xff0c;而是子main()函数之前自动调用不能作为参数传入不能有传入参数和返回值 作用&#xff1a; 对变量进行初始化检查/修复程序状态注册运行一次计算 以下是<<the way to go>>…

环保设备产线智能工厂数字孪生可视化平台,推进制造业数字化转型

环保设备产线智能工厂数字孪生可视化平台&#xff0c;推进制造业数字化转型。数字化转型已成为制造业发展的重要趋势&#xff0c;而环保设备产线智能工厂数字孪生可视化平台则是推进制造业数字化转型的关键之一。环保设备产线智能工厂数字孪生可视化平台是一种基于数字孪生技术…

JS实现对用户名、密码进行正则表达式判断,按钮绑定多个事件,网页跳转

目标&#xff1a;使用JS实现对用户名和密码进行正则表达式判断&#xff0c;用户名和密码正确时&#xff0c;进行网页跳转。 用户名、密码的正则表达式检验 HTML代码&#xff1a; <button type"submit" id"login-btn" /*onclick"login();alidate…

Lombok插件 注解(有参无参getset方法)

Java神奇工具——Lombok[最全]_java lombok-CSDN博客 在普通的java项目 1直接导入lombok 的jar包 2配置文件路径 配置正确的lombok路径&#xff0c;需要添加lombok插件实现 找到全局设置 查看是否安装lombok插件 &#xff08;idea一般自带有lombok插件&#xff09; 在Maven中 …

贪吃蛇详解

Win32 API介绍&#xff1a; 在写贪吃蛇这款游戏时需要用到一些有关Win32 API的知识&#xff0c; 接下来我会将设计到的知识点列举并讲解&#xff1a; 首先我们先了解一下Win32 API是什么&#xff0c;Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&am…

基于灰狼优化器GWO与小龙虾优化算法COA的无人机航迹规划

一、灰狼优化器算法 灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;GWO&#xff09;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法&#xff0c;它具有较强的收敛性能…

使用 Dify 和 MoonShot API 做一个懒人 AI 阅读工具(二):轻量 RAG 应用

这篇文章&#xff0c;我们继续聊聊&#xff0c;如何折腾 AI 应用&#xff0c;把不 AI 的东西&#xff0c;“AI 起来”。 在不折腾复杂的检索系统的前提下&#xff0c;做一些轻量的 RAG 实践。 写在前面 我从“机器之心会员通讯”上线以来就在订阅&#xff0c;相比较即时的行…

若依文件下载

后端自带工具controller package com.ruoyi.web.controller.common;import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.Logger…

Python二进制文件转换为文本文件

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在日常编程中&#xff0c;我们经常会遇到需要将二进制文件转换为文本文件的情况。这可能是因…

Java进阶-异常处理

概述 常见运行时异常 直接继承自RuntimeException或者子类&#xff0c;编译阶段不会报错&#xff0c;运行时可能出现的错误 运行时异常&#xff1a;一般是程序员业务没有考虑好或者是编程逻辑不严谨引起的程序错误 数组索引越界异常空指针异常类型转换异常数学操作异常数字转…

【C++报错】c++实例类的时候提示已声明所在行数,所属文件不可访问 的解决办法

这里写自定义目录标题 问题重现 问题解决 问题重现 c实例类的时候提示已声明所在行数&#xff0c;所属文件不可访问 问题解决 在此处&#xff0c;将 构造函数 放在public 问题消除

【AMBA Bus ACE 总线 1 -- ACE 总线介绍】

文章目录 Coherency 问题简介ACE 出现背景ACE 总线介绍Acknowledge signalingSnoop Channel Signals Coherency 问题简介 一致性&#xff08;Coherency&#xff09;问题通常出现在多处理器系统中&#xff0c;尤其是当多个处理器可能同时访问同一内存位置时。简单来说&#xff…

解决在 Python 数据分析中遇到的 Matplotlib 字体警告问题

当在 Python 数据分析中遇到类似以下警告时&#xff1a; D:\anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: Glyph 24037 missing from current font.font.set_text(s, 0.0, flagsflags) D:\anaconda3\lib\site-packages\matplotlib\ba…

【Java EE】总结12种锁策略以及synchronized的实现原理

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

网易云热评加密函数逆向(Jsrpc)

今天给大家来个jsrpc实战教程,让大家继续加深对jsrpc的理解和认识。 1、因为网易云音乐热评的加密并不在cookie上,而是参数加密,所以这里就不需要进行hook住cookie了。 2、之前就知道网易云音乐热评的加密存在之地是在下图的位置,是那个函数window.asrsea(JSON.stringify(…

我成为亚马逊云科技“技领云博主“啦

小李哥前一阵子被选为了大中华区亚马逊云科技”技领云领袖“博主项目首批成员。目前该项目也在公开招募&#xff0c;今天就给大家给大家探秘下该项目&#xff5e;1️⃣什么是”技领☁️领袖“博主项目&#xff1f; 该项目是由亚马逊云科技AWS官方发起的项目&#xff0c;主要是招…

开源代码分享(23)-基于混合整数二阶锥规划(MISOCP)的主动配电网最优潮流计算

参考文献&#xff1a; [1]乔珊. 主动配电网多源协同运行优化研究[D]. 山东大学, 2021. [2]高红均,刘俊勇,沈晓东,等. 主动配电网最优潮流研究及其应用实例 [J]. 中国电机工程学报, 2017, 37 (06): 1634-1645. DOI:10.13334/j.0258-8013.pcsee.152839. 1.引言 主动配电网技术的…

智慧养猪场视频AI智能监控与可视化管理方案

在科技日新月异的今天&#xff0c;智能化、自动化已成为众多行业追求的方向。养猪业作为传统农业的重要组成部分&#xff0c;同样迎来了技术革新的春风。特别是随着人们对食品安全等问题的日益关注&#xff0c;养猪场视频监控监管方案的智能化升级显得尤为重要。 养猪场视频智…

Java基础(运算符)

运算符 运算符和表达式 运算符&#xff1a;对字面量或者变量进行操作的符号 表达式&#xff1a;用运算符把字面量或者变量连接起来&#xff0c;符合java语法的式子就可以称为表达式&#xff1b;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符&#xff08;加…

短视频素材哪个软件好?短视频素材那里来?

在当今数字化时代&#xff0c;高质量的视频素材对于提升任何视频项目的吸引力和专业度都至关重要。以下是全球范围内精选的视频素材网站&#xff0c;每个都能为你的视频创作提供独特的视觉支持和灵感。 1. 蛙学府&#xff08;中国&#xff09; 主要提供丰富的中文视频素材&…