[Profiling] 剖析 Unity 游戏的终极指南[1] - 介绍

英文原文:https://resources.unity.com/games/ultimate-guide-to-profiling-unity-games?utm_source=demand-gen&utm_medium=pdf&utm_campaign=render-with-quality-and-flexibility&utm_content=introduction-to-urp-ebook

  流畅的性能对于为玩家创造身临其境的游戏体验至关重要。 通过针对各种平台和设备分析和优化您的游戏性能,您可以扩大您的玩家群并增加成功的机会。

  本指南汇集了有关如何在 Unity 中分析应用程序、管理其内存以及从头到尾优化其功耗的高级建议和知识。

  一致的端到端分析工作流程是高效游戏开发的“必备”,从一个简单的三点程序开始:

  • 进行重大更改之前的分析:建立基线
  • 开发期间的分析:跟踪并确保更改不会破坏性能或预算
  • 之后的分析:证明更改具有预期的效果

  精益、高性能的代码和优化的内存使用可提高低端和高端设备的性能。 注意热控制有助于移动设备上宝贵的电池周期。 总体而言,良好的表现会提高玩家的舒适度,从而推动更高的采用率和留存率。

  该指南的主要作者是软件工程师和游戏开发者 Sean Duffy。 Sean 为专业的 Unity 开发人员开发课程、培训和工具已有六年多的时间,并与人合着了有关 Unity 游戏开发的书籍,包括 Unity Games by Tutorials。

  高级 Unity 工程师也为这本电子书做出了贡献,其中包括 Steven Cannavan、Steve McGreal 和 Martin Tilo Schmitz。

  Unity 提供的其他性能优化指南包括优化主机游戏和 PC 的游戏性能和优化移动设备的游戏性能

Unity 团队在您的分析和优化工作中一切顺利。


分析 101

  在深入了解如何在 Unity 中分析游戏的细节之前,让我们总结一些关键概念和分析原则。

  Profiler 是开发人员工具中用于识别代码中的内存和性能瓶颈的最有用的工具之一。

  将 Profiler 视为侦探工具,可帮助您解开应用程序性能滞后的原因或代码分配过多内存的原因。 它们可帮助您了解 Unity 引擎的幕后情况。

  Unity 附带了各种分析工具,用于在编辑器和硬件上分析和优化您的代码。 还建议对每个目标平台使用本机分析工具,例如 Arm、Apple、PlayStation 和 Xbox 提供的工具。

了解 Unity 中的分析

Unity 的分析工具在编辑器中和包管理器中可用。

  • Unity Profiler:衡量 Unity 编辑器、您的应用程序在 Play 模式下的性能,或连接到在开发模式下运行您的应用程序的设备。

  • Profiling Core 包:提供可用于将上下文信息添加到 Unity Profiler 捕获的 API

  • Memory Profiler:提供深入的内存性能分析的工具

  • Profile Analyzer:比较两个分析数据集以分析您的更改如何影响应用程序的性能。

  “Unity 分析和调试工具”部分提供了有关如何使用这些工具以及帧调试器的更多详细信息。

基于样本的与仪器分析

有两种常用的分析游戏性能的方法

  • 基于样本的分析
  • 仪器分析

  基于样本的分析是收集并分析有关应用程序中正在完成的工作的统计数据。

  基于样本的分析器每隔“n”纳秒探测一次调用堆栈,并使用调用堆栈信息来确定函数何时被调用(以及由哪些函数调用),以及调用了多长时间。 通过使用更高的采样率频率可以提高这种分析方法的准确性,因为调用堆栈中不会错过对函数的更短调用。 但是,它会导致更高的开销。

基于仪器的分析器

  基于检测的分析涉及通过添加 Profiler Marker 来“检测”代码,这些标记记录有关每个标记中的代码执行多长时间的详细时序信息。 此分析器捕获每个标记的开始和结束事件流。 此方法不会丢失任何信息,但它确实依赖于放置标记以便捕获分析数据。

  Unity Profiler 是基于检测的。 在大多数 Unity API 表面中设置的标记实现了细节与开销的良好平衡。 重要的本机功能和脚本代码库消息调用被检测为捕获最重要的“广泛笔触”,而不会产生太多开销。

  这使您可以探索代码的性能、轻松定位性能问题并发现快速优化的胜利,您可以选择通过添加自定义 Profiler 标记或使用深度分析来更深入。

  深度分析会在每个脚本方法调用中自动插入开始和结束标记,包括 C# Getter 和 Setter 属性。 该系统在脚本方面提供了完整的分析详细信息,但它带来了相关的开销,可以根据捕获的分析范围内的调用数量来夸大报告的时序数据。

Unity中基于仪器的分析

  上面提到的脚本代码基消息调用(默认显式检测)通常包括从 Unity 本机代码到托管代码的调用的第一个调用堆栈深度。 例如,包括常见的 MonoBehaviour 方法,如 Start()、Update()、FixedUpdate() 等。

在这里插入图片描述
分析示例脚本显示了对 Unity Instantiate() 方法的 Update() 方法调用

  您还可以在 Profiler 中查看回调到 Unity API 的托管脚本代码的子示例。 但是,需要注意的一点是,所讨论的 Unity API 代码本身需要具有 Instrumentation Profiler 标记。 大多数带有性能开销的 Unity API 都经过检测。 例如,使用 Camera.main 将导致 FindMainCamera 标记出现在配置文件捕获中。 在检查捕获的分析数据集时,了解不同标记的含义很有用。 使用此常见 Profiler Markers 列表了解有关它们的更多信息。

在这里插入图片描述
使用 Camera.main 会导致 FindMainCamera 标记出现在配置文件捕获中。

使用 Profiler 标记增加分析细节

  默认情况下,Unity Profiler 将分析显式包装在 Profiler 标记中的代码时序。 手动将 Profiler Markers 插入到代码中的关键函数中,可以有效提高分析运行的详细程度,而不会产生完整的深度分析开销。

Profiler 模块

  Profiler 捕获每帧性能指标以帮助您识别瓶颈。 使用 Profiler 中包含的 Profiler 模块深入了解详细信息,例如 CPU 使用率、GPU、渲染、内存、物理等。

在这里插入图片描述
Profiler 主窗口视图,左侧显示模块,底部显示详细信息面板

  Profiler 窗口在视图底部的面板中列出了使用当前选定的 Profiler 模块捕获的详细信息。 例如,CPU Usage Profiler 模块显示 CPU 工作的时间线或层次结构视图以及特定时间。

在这里插入图片描述
CPU 使用模块时间线视图,显示主线程和渲染线程标记详细信息

  使用 Unity Profiler 评估应用程序的性能并深入研究特定领域和问题。 默认情况下,Profiler 将连接到 Unity Editor Player 实例。

  请注意,您会发现在编辑器中进行性能分析与对独立构建进行性能分析之间存在很大差异。 将 Profiler 连接到直接在目标硬件上运行的独立构建总是更可取的,因为这会产生最准确的结果,而无需编辑器开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值