首页 > 其他分享 >Unity性能分析(一)流程与工具的使用

Unity性能分析(一)流程与工具的使用

时间:2024-04-30 15:24:27浏览次数:24  
标签:分析 捕获 流程 代码 Profiler Unity Editor 性能

性能分析工作流对于游戏开发是“必备”的,从基本的三方面开始:

  • 在修改之前分析:建立基准线
  • 在开发过程中分析:确保修改不会影响性能
  • 在修改后分析:证明修改产生了预期效果

分析工具是开发者的实用工具之一,可以帮助开发者定位代码中的内存问题和性能瓶颈,也能帮助了解Unity引擎底层的运行。

Unity提供了多种分析工具,用于在Editor和目标设备上分析代码。建议使用各目标平台(例如Arm,Apple,PlayStation和Xbox等)自己的原生分析工具。

理解Unity中的分析工作

Unity的分析工具可在Editor和Package Manager中获得:

  • Unity Profiler:在Editor中,或连接到设备上,分析游戏的性能。
  • Profiling Core package:提供API,可以向Unity Profile捕获添加上下文信息。
  • Memory Profiler:提供深入内存性能分析。
  • Profile Analyzer:比较两个分析数据集,分析修改对性能的影响。

采样法分析vs仪表法分析

游戏性能分析通常采用:

  • 采样法分析
  • 仪表法分析

采样法分析是收集游戏运行时的统计数据并进行分析。

采样法分析器每n纳秒检测一次调用堆栈,并利用堆栈信息查明函数的调用时机(由哪些函数调用),以及持续时间。在这种分析方法中,提高采样率频率会提高准确性,但是会带来更高的开销。

仪表法分析

仪表法分析通过添加Profiler makers来“仪表化”代码,记录每个标记中的代码执行的详细时间信息。该分析器为每个标记捕获一系列Begin和End事件。这种方法不会丢失任何信息,但是需要按顺序放置标记,以便捕获数据。

Unity Profiler通过在多数Unity API接口设置标记,在重要原生函数和脚本代码间的调用进行了仪表化,捕获最重要的“概括信息”。也支持添加自定义Profiler makers进一步深入分析。

深层分析会自动在每个脚本方法调用中插入Begin和End标记,包括C# Getter和Setter属性。该系统在脚本侧提供了完整的分析细节,但也带来了相应的开销,根据在捕获的分析范围内调用次数的多少,也会让分析报告的时间产生膨胀。

Unity中的仪表化分析

如上所述,脚本代码调用(默认进行了仪表化)通常包括从Unity原生代码到托管代码的第一个调用堆栈。例如MonoBehaviour的常见方法:Start、Update、FixedUpdate等。

分析一个示例脚本,显示了Update()方法调用Unity的Instantiate()方法

在Profiler中,还可以看到Unity API回调的脚本代码的子采样。值得注意的是,涉及的Unity API代码需要具有自身的Profiler markers。大多数带有性能开销的Unity API都进行了仪表化。例如Camera.main会导致在捕获的分析数据中出现FindMainCamera标记。在检查捕获的数据集时,了解不同marker的含义非常重要。请使用常用Profiler markers列表来了解更多信息。

使用Camera.main会在捕获分析数据中出现FindMainCamera标记。

使用Profiler markers增加分析详细信息

默认情况下,Profiler会分析Profiler markers中包含代码的时间开销。在代码的关键函数中手动插入Profiler markers可增加详细信息而不产生全部的深层分析开销。

Profiler模块

分析器以每帧性能指标为基础,帮助找到瓶颈。通过使用分析器中包含的Profiler模块,如CPU Usage, GPU, Rendering, Memory, Physics等,深入了解细节。

Profiler窗口主视图,左侧显示模块,底部显示详细信息。

Profiler窗口在视图底部面板中列出了当前分析器模块捕获的详细信息。例如,CPU usage模块显示CPU工作的timeline或hierarchy视图,以及具体的时间。

CPU usage模块的timeline视图,显示主线程和渲染线程的标记详细信息。

默认情况下,分析器将连接到Unity Editor player实例。

在 Editor中进行分析和对独立构建分析的性能差异很大。将Profiler连接到目标设备上的独立构建是更好的选择,这样可以获得更准确的结果,而不受Editor开销的影响。

标签:分析,捕获,流程,代码,Profiler,Unity,Editor,性能
From: https://www.cnblogs.com/flamesky/p/18168059

相关文章

  • Unity性能分析(二)CPU/GPU分析
    设置每帧时间预算帧率(fps)并不是衡量游戏稳定体验的理想指标。考虑以下情况:在运行时的前0.75s内渲染了59帧。然后接下来的1帧需要0.25s才能渲染完毕。虽然是60fps,但实际上会让玩家感觉卡顿。这是需要设置帧时间预算的重要原因之一。这为您提供了一个目标,在对游戏进行分析和优化时......
  • Unity性能分析(三)内存分析
    Unity中有两种分析内存的方法:MemoryProfiler:内置的分析器,提供内存使用的基本信息。MemoryProfilerpackage:将package添加到项目中,更详细地分析内存使用情况。可以存储和比较快照查找内存泄漏,查看内存布局以查找内存碎片问题。确定物理RAM限制每个目标平台都有一个内存限......
  • Unity性能分析(四)Unity性能分析工具使用
    使用Profiler按照以下步骤开始使用UnityProfiler:在进行分析时,必须使用开发版本。File>BuildSettings>DevelopmentBuild。勾选AutoconnectProfile(可选)。注意:AutoconnectProfile会增加初始启动时间。如果不启用AutoconnectProfiler,可以随时手动连接正在运行的开发版......
  • Unity游戏框架设计之场景管理器
    Unity游戏框架设计之场景管理器简单介绍在游戏开发过程中,我们经常对Scene进行切换。为了不使场景切换时造成的游戏卡顿,可以Unity官方API利用协程的方式异步加载场景。同时,为提升Scene切换的玩家体验,我们经常会在场景切换的开始,先显示过渡UI,然后才对目标场景进行加载......
  • 首届超算互联网峰会!天翼云弹性高性能计算E-HPC亮相!
    4月11日,首届超算互联网峰会暨国家超算互联网平台上线仪式在天津顺利举办,来自部委、省级科技厅、中国科学院、中国工程院、计算产业链相关企业等专家、代表数百人共聚一堂,见证了这一历史性时刻。天翼云作为副理事长单位受邀参会,围绕超算领域的前沿技术和应用,与业内专家共同探讨互联......
  • 在Linux中,如何监控磁盘I/O性能?
    在Linux中,可以使用iotop和iostat命令来监控磁盘的I/O性能。以下是如何使用这两个工具以及它们各自的特点:使用iotop命令:iotop是一个实时显示系统磁盘活动的工具,类似于top命令,但专注于I/O活动。它能够展示每个进程或线程的实时I/O使用情况,包括读写带宽,以及等待I/O操作所花费的时......
  • Unity游戏框架设计之任务管理器
    Unity游戏框架设计之任务管理器简单介绍在游戏开发中,我们可能会遇到下述需求。当角色的生命值减少时,我们需要让角色播放受伤动画,让系统播放角色受伤音效,将当前的新的生命值更新到UI上等等操作。如果在角色的代码中直接实现上述的操作,则将导致代码的高度耦合,不利于后期的维护和......
  • 用Mermaid画流程图、序列图、类图、甘特图
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取编程资料Mermaid简介Mermaid是一种基于文本的图表定义语言,它允许开发者使用文本和代码的形式来创建图表。这种语言的设计初衷是为了方便版本控制和多人协作,同时简化图表的维护和更新过程。......
  • Unity游戏框架设计之消息管理器
    Unity游戏框架设计之消息管理器简单介绍消息管理器又可以称为任务管理器,主要解决延迟执行某些代码的问题。比如,我们希望一些代码可以延迟指定的时间后才执行,或者我们希望一些代码可以在固定的时间执行,又或者我们希望一些代码可以每隔一段时间就执行一次。消息管理器就是为了实现......
  • Unity游戏框架设计之协程管理器
    Unity游戏框架设计之协程管理器代码设计/**协程管理器*/publicclassCoroutineManager:SingletonMono<CoroutineManager>{/***创建CoroutineTask*/publicCoroutineTaskCreateCoroutine(IEnumeratorcoroutine,Action<bool>finishHandler......