Unity Profiler 可帮助检测运行时出现任何延迟或冻结的原因,或帮助了解特定帧(时间点)发生了什么。默认启用 CPU 和内存跟踪。如果对游戏有特定需求(例如,大量使用物理系统或基于音乐的游戏玩法),可以监控其他性能分析器模块,如渲染器、音频、物理系统等。

通过选中 Development Build 和 Autoconnect Profiler 来针对设备构建应用程序,或手动连接以加快应用程序启动速度。

选择要分析的目标。Record 按钮会跟踪应用程序运行几秒钟( 默认为 300 帧)。如果需要捕获更长时间, 请转到 Unity > Preferences > Analysis > Profiler > Frame Count 增大该值(最高可调整到 2000)。这意味着 Unity 编辑器必须执行更多的 CPU 工作、占用更多内存,但根据特定场景,这可能会很有用。

使用 Timeline 视图确定应用程序受 CPU 限制还是受 GPU 限制。

这是一种基于 instrumentation 的性能分析器,它分析显式包装在 ProfileMarkers 中的代码时序(例如 Monobehaviour 的 Start 或 Update 方法,或特定的 API 调用)。此外,当使用深度性能分析设置时,Unity 可以分析脚本代码中每个函数调用的开始和结束,以准确告诉您应用程序的哪一部分导致运行速度变慢(但这会带来额外的开销)。

在对游戏进行性能分析时,我们建议您涵盖游戏的尖峰和平均帧开销。了解和优化每一帧执行的高开销操作,对运行帧率低于目标帧率的应用程序更有用。在寻找尖峰时,首先探索高开销操作(例如,物理系统、AI、动画)和垃圾收集。

在窗口中单击来分析特定帧。然后,使用 Timeline 或 Hierarchy 视图 :

  • Hierarchy 显示分组到一起的 ProfileMarkers 的层次结构。这让您可以基于时间成本(以毫秒为单位,Time ms 和 Self ms)对样本进行排序。您还可以计算该帧中函数的调用次数和托管堆内存 (GC Alloc)。
  • Timeline 显示特定帧时间的可视化明细。这让您可以直观了解活动之间以及跨不同线程的关系。使用它可以确定应用程序受 CPU 限制还是受 GPU 限制。

Hierarchy 视图可按时间成本对 ProfileMarkers 进行排序。

有关 Unity Profiler 的完整概述,请单击此处。对于刚刚接触性能分析的人士,也可以观看 Unity 性能分析简介。

在优化项目中的任何内容之前,请先保存 Profiler .data 文件。然后实施更改,并比较修改前后保存的 .data。按照“分析、优化和比较”的方式来提高性能。反复进行这一过程。

及早并经常进行性能分析

Unity Profiler 可提供关于应用程序的性能信息,但如果您不使用它,它也帮不了您。请在开发早期对项目进行性能分析,而不仅仅是在即将发布时。一旦出现问题或尖峰,立即展开调查。为项目开发一个“性能签名 (performance signature)”,将能够更轻松地发现新问题。

不要盲目优化

不要猜测或假设是什么拖累了游戏性能。使用 Unity Profiler 和特定平台的工具找出导致延迟的具体原因。

此外,并非本指南中介绍的所有优化都适用于您的应用程序。在别的项目中具有良好效果的措施可能对您的项目不起作用。找出真正的瓶颈,然后集中精力解决问题。

在目标设备上进行性能分析

虽然在编辑器中进行性能分析可以非常粗略地了解游戏中不同系统的相对性能,但什么也比不上在真机上进行性能分析。尽可能在目标设备上对开发构建版本进行性能分析。记住,请针对计划支持的最低规格的设备进行性能分析和优化。

仅仅依靠 Unity Profiler 无法了解引擎的每一个部分。幸运的是,iOS 和 Android 都包含可帮助您测试性能的原生工具 :

  • 在 iOS 上,可以使用 Xcode 和 Instruments。
  • 在 Android 上,可以使用 Android Studio 和 Android Profiler。

某些硬件还可以利用其他性能分析工具(例如 Arm Mobile Studio、Intel VTune 和 Snapdragon Profiler)。有关更多信息,请参阅对使用 Unity 创建的应用程序进行性能分析。

使用 Profile Analyzer

通过该工具,可以聚合多个 Profiler 数据帧,然后找到感兴趣的帧。想在对项目做出更改后查看 Profiler 有何变化? Compare 视图允许您加载和比较两个数据集,这对于测试更改结果是否有所改进至关重要。可通过 Unity Package Manager 获取 Profile Analyzer。

 需要更深入地了解帧和标记数据? Profile Analyzer 可弥补现有 Profiler 之不足。

满足每帧的特定时间预算要求

根据每秒目标帧数 (fps),每一帧都有时间预算。理想情况下,以 30 fps 运行的应用程序允许每帧用时约 33.33 ms (1000 ms/30 fps)。如果目标为 60 fps,则每帧用时上限为 16.66 ms。

但是,对于移动设备,不能始终使用这么长时间,否则设备会过热,操作系统会对 CPU 和 GPU 进行热节流。我们建议只使用约 65% 的可用时间,以便在帧之间留出冷却时间。目标为 30 fps 时,典型的帧预算为每帧约 22 ms,60 fps 时为 11 ms 左右。

设备可以在短时间内超出该标准(例如,过场动画或加载序列),但不能长时间超标。

确定应用程序受GPU 限制 (GPU-bound) 还是受 CPU 限制 (CPU-bound)

Profiler 可以告诉您 :罪魁祸首是 CPU 耗时超出了分配的帧预算,还是在于 GPU。

如果看到 Gfx.WaitForCommands 标记,说明渲染线程已准备就绪,但可能正在等待主线程上的某个瓶颈。

如果经常遇到 Gfx.WaitForPresent,说明主线程已准备就绪,但正在等待 GPU 渲染帧。

考虑设备温度

大多数移动设备不像台式机那样具有主动冷却功能。物理热量水平会直接影响性能。

如果设备运行得很热,即使没有导致问题,Profiler 也可能报告性能不佳。请在短时间内进行性能分析,以保持设备凉爽和模拟真实世界的情况,从而应对性能分析产生的开销。

在最低规格设备上进行测试

市面上有各种各样的 iOS 和 Android 设备。请在希望应用程序支持的最低规格的设备上测试项目。

【Unity3D 官方移动游戏优化指南】2.性能分析相关推荐

  1. Unity游戏优化指南大全(持续更新中!)

    Unity游戏优化指南大全 三个官方优化提示: 性能和优化 (Performance and Optimization) - 关于性能分析器以及性能和优化技巧的 Unity 学习教程. Best pr ...

  2. Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化

    拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...

  3. unity移动游戏优化指南

    目录 简介 性能分析 CPU Usage Profiler 模块 内存 自适应性能 编程和代码架构 项目配置 资源 图形和GPU优化 用户界面 音频 动画 物理 工作流程和协作 简介 优化 iOS 和 ...

  4. 百度官方SEO搜索引擎优化指南V2.0版本发布

    百度互联网创业俱乐部发布了<百度SEO搜索引擎优化指南V2.0>版本了,大家快来下载,  较之第一个版本的基础知识介绍,第二个版本更注重了网站性能和网站可用性,以及网站运营,数据分析方面, ...

  5. Google SEO官方《搜索引擎优化指南》(6): 写好锚文本

    Google网站管理员官方博客发布了"搜索引擎优化SEO指南",以实例阐述和讲解了搜索引擎优化的具体操作步骤.这对网站管理员来说具有很强的指导性和参考性.下面我将用一周时间把它翻译 ...

  6. 性能优化指南:性能优化的一般性原则与方法

    作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统.本文从以下几个方面来思考这个问题:性能优化的一般性原则,性能优化的层次,性能优化的 ...

  7. google官方《搜索引擎优化指南》

    Google在2008年的时候自己发布的seo网站优化手册 这个是一个英文的PDF文档,如果英文不好的朋友,可以参考: http://blog.qingyu.org/google-seo-1.html ...

  8. mysql解释器优化_MySQL——SQL性能分析优化利器之Explain

    系统性能的优劣取决于我们sql的查询速度,MySQL Explain命令是分析SQL性能及优化不可缺少的一部分. Explain被我们称为解释器,通过 explain 我们可以知道以下信息:表的读取顺 ...

  9. 乐心湖‘s Blog——MySQL入门到精通 —— 囊括 MySQL 入门 以及 SQL 语句优化 —— 索引原理 —— 性能分析 —— 存储引擎特点以及选择 —— 面试题

最新文章

  1. php deprecated,解决php中each函数在7.2版本提示deprecated错误问题
  2. Linux操作系统的8个经典技巧
  3. 《Python入门到精通》函数
  4. awk分割列 输出时间相关
  5. 数据建模_浅谈数据仓库建设中的数据建模方法
  6. 基于 Eclipse 平台的代码生成技术
  7. opencv fillConvexPoly深究
  8. MYSQL异常处理日志:主从库同步延迟时间过长的分析
  9. windows中的hosts文件
  10. 注册表删除计算机用户密码,修改注册表删除WIN10开机密码
  11. http的rest服务简介_REST概念简介
  12. 绿坝现漏洞政府天价难护航
  13. 洛谷 P3356 火星探险问题
  14. java代码-zip解压不可预料的压缩文件末端一级压缩包中的文件为0kb以及目录创建流会报错
  15. ppt中的表格行高批量设置
  16. AD20的最全安装步骤
  17. Mac BERT 论文解读 Revisiting Pre-trained Models for Chinese Natural Language Processing
  18. Postgresql日期转字符串
  19. 分布式与集群的区别是什么
  20. flux 中的 buffer 的原理

热门文章

  1. XenApp_XenDesktop_7.6实战篇之一:走进桌面虚拟化世界
  2. BCryptPasswordEncoder 对密码加密
  3. 屋面房顶白色外壁降温用凉凉胶隔热面漆 隔热性能十分优异
  4. nefuoj 9 喜洋洋
  5. 1.1 “DT城市”智能服务
  6. 抖音、今日头条、西瓜视频将打包上市
  7. 计算机专业的专科生能找到好工作吗?|猿代码科技
  8. oracle19c克隆PDB
  9. 考研英语作文 万能的开头结尾
  10. Apple Final Cut Pro 10.4.8