网易首页 > 网易号 > 正文 申请入驻

Unity 2021 LTS | 全新Unity Profiler,支持定制性能指标

0
分享至

要想优化一个应用,你需要准确地测量出它对硬件的消耗。Unity 2021 LTS 推出了新的 Profiler 扩展功能,新 Profiler 计量器带有一种轻型的自定义机制,允许你为 Unity 应用和软件包设定你自己的性能指标。并且,你还能为 Profiler 添加模块,直接在窗口中可视化这些数据。

请在下方了解怎样使用这些功能来提高你项目的性能。

什么是Unity Profiler?

Unity Profiler 是一款用于记录应用详细性能的工具。它可以记录大多数类别的性能指标,比如内存、音频和渲染。记录下的指标数据既可在 Profiler 窗口中查看,有时也能用脚本查询。有了这些信息,你就能深入了解 Unity 应用如何使用目标平台的硬件资源,找出那些可以优化的地方。

Unity Profiler:

https://docs.unity3d.com/2021.2/Documentation/Manual/Profiler.html

Profiler计量器

什么是 Profiler 计量器?

Profiler 计量器负责跟踪、测量或计算应用产生的性能分析相关指标,比如,Unity 本身自带的默认 Profiler 计量器会跟踪记录应用所使用的总内存字节数,称为“Total Used Memory(总占用内存)”。这项数据在衡量目标设备上应用的内存足迹时非常重要。Profiler 窗口的 Memory 模块会按时间统计该数据以及其他与内存相关的指标,如下图。

自定义 Profiler 计量器

通过添加自己的 Profiler 计量器,你就能记录系统或应用内的特定性能指标。这些数据可以在 Profiler 窗口中与内置计量器等其他性能数据一起展示。而你就能直接在 Profiler 窗口中配合其他背景数据来查看应用独特的性能特征。

在下例中,一个自定义 Profiler 计量器会跟踪记录场景内活跃的生物数量。它与内置的 Batches Count 并排展示,后者记录着系统每帧会处理多少批次的渲染。如此一来,我们可以轻松地关联这两个指标,了解生物数量对批量渲染次数的影响。

左下角为Profiler计量器在游戏UI中的例子

此外,你所有的 Profiler 计量器包括内置自带的计量器都可以在发行版中使用。发行版比开发版更能代表应用的真实性能。

但是出于优化原因,Unity Profiler 并不能添加到发行版的游戏包中。这时,你可以从脚本查询 Profiler 计量器,有选择地监测发行版的重要指标。你可以用这种方法检测连续整合(Continuous Integration)里可能出现的性能倒退。或者,你也可以用 Unity 的 UI 系统在左下角(如下图)等位置显示一块调试界面。更多相关细节详见 Profiler Recorder 文档。

UI 系统:

https://docs.unity3d.com/Manual/UIToolkits.html

Profiler Recorder 文档:

https://docs.unity3d.com/ScriptReference/Unity.Profiling.ProfilerRecorder.html

在游戏UI的左下角显示的Profiler计量器

如果你只想在开发版中显示 Profiler 计量器,可以参照 Conditional Compilation 文档里的方法用 DEVELOPMENT_BUILD 脚本符号(scripting symbol)将其标出,在发行版中去除 Profiler。

Conditional Compilation 文档:

https://docs.unity3d.com/Manual/PlatformDependentCompilation.html

上手使用

Profiler 计量器目前已随Profiling.Core 包发布于 Unity 2021 LTS 版。Unity 2021 LTS 默认下不安装该软件包,请参考文档中的安装说明在 Package Manager 中查找并安装。

Profiling.Core 包:

https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/manual/profilercounter-guide.html

在安装完成后,你就能创建 Profiler 计量器(在 API 中叫做 ProfilerCounter 或 ProfilerCounterValue)并依照以下方法更新数据。


using UnityEngine; using Unity.Profiling; public class CreatureCounter : MonoBehaviour { static readonly ProfilerCounterValue k_CreatureCounter = new( ProfilerCategory.Scripts, "Creature Count", ProfilerMarkerDataUnit.Count, ProfilerCounterOptions.FlushOnEndOfFrame); void OnEnable() { k_CreatureCounter.Value += 1; } void OnDisable( ) { k_CreatureCounter.Value -= 1; }}

Profiler模块

什么是 Profiler 的模块?

Profiler 窗口内的模块显示着相应领域或流程中的统计信息,如内存、音频或渲染。每个模块都为特定领域的性能概况提供了详细信息。如下方的 Memory Profiler 模块便展示了内存占用相关的七个关键指标,再下边则是显示某一帧内存分布的详情部分。

Custom Profiler 自定义模块

Unity 2021 LTS 支持在分析器窗口内定制模块。你可以直接在窗口里显示你自己所选的性能指标。你也可以自定义模块详情界面的可视化方式,让你能以自由地选择性能数据的展示方法。

Profiler Module Editor(模块编辑器)

我们推荐使用Profiler Module Editor来快速创建临时性 Profiler 模块。比如你可以用临时性 Profiler 模块来检验某个新 Profiler 计量器。用 Profiler Module Editor 创建的模块与本地用户的编辑器绑定,不能在其他项目中使用。

更多详情请参见 模块编辑器文档 。

https://docs.unity3d.com/Manual/profiler-module-editor.html

Profiler 模块的 API

Profiler 模块 API 支持将自定义的模块添加到 Profiler 窗口中,供项目或软件包的所有用户使用。使用该 API 编写的模块会被自动添加到 Profiler 窗口,所有项目或软件包的用户都可使用。

资源商店的发布者或软件包开发者可以在包内直接发布自己设置的 Profiler 模块。用户在安装包的同时也会安装你的 Profiler 模块。这样一来,你就能直接在 Profiler 窗口内展示特定的性能指标。

Unity 的内部团队已经在使用这个 API 编写并发布自定义的 Profiler 模块。目前包含有自定义模块的软件包有 Netcode for GameObjects、Adaptive Performance、Mali System Metrics 等。

使用方法

若想使用该 API 创建一个 Profiler 模块,请参照以下代码在项目或包中新建一份 ProfilerModule 脚本。


using Unity.Profiling; using Unity.Profiling.Editor; [System.Serializable] [ProfilerModuleMetadata("Creature Batches")] public class CreatureBatchesProfilerModule : ProfilerModule { static readonly ProfilerCounterDescriptor[] k_Counters = { new("Creature Count", ProfilerCategory.Scripts), new("Batches Count", ProfilerCategory.Render), }; public CreatureBatchesProfilerModule() : base(k_Counters) { }}

新建的模块将自动出现在 Profiler 窗口内,供所有用户使用。

关于 API 的更多介绍请参见 Profiler 模块的手册和 API 文档。

手册:

https://docs.unity3d.com/2022.1/Documentation/Manual/Profiler-creating-custom-modules.html

API:

https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Unity.Profiling.Editor.ProfilerModule.html

Profiler 模块的 API 还支持用 UI Toolkit 等 UI 系统为某一帧的性能数据绘制自定义的可视化图形。

例如,Adaptive Performance 的 Profiler 模块就使用了该 API 来展示某一帧的详细性能信息,以及性能瓶颈(Bottleneck)和过热警告(Thermal Warning)等其他背景信息。这些指标可以帮助用户清楚地了解到应用在什么情况下会触发设备的过热保护。所以,你也可以使用该 API 来自定义 Profiler 模块的性能数据可视化方法。

关于创建自定义 Profiler 模块的细节请参考 Profiler 模块的手册和 API 文档。

额外的背景数据

有时我们需要用 Profiler 模块和计量器来统计更多、更复杂的数据。比如在 Profiler 模块的详情部分展示当前帧的屏幕截图来作参考,如下图。

要想将图片等其他帧数据传给 Profiler,并在 Profiler 记录内展示,你可以使用 Profiler.EmitFrameMetaData 和 FrameDataView.GetFrameMetaData 这两个 Frame Metadata API。

如果数据在每次分析时只需记录一次,比如游戏的配置,你也可以使用 Profiler.EmitSessionMetaData 和 FrameDataView.GetSessionMetaData 这两个 Session Metadata API。

Profiler.EmitFrameMetaData:

https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Profiling.Profiler.EmitFrameMetaData.html

FrameDataView.GetFrameMetaData:

https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Profiling.FrameDataView.GetFrameMetaData.html

Profiler.EmitSessionMetaData:

https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Profiling.Profiler.EmitSessionMetaData.html

FrameDataView.GetSessionMetaData:

https://docs.unity3d.com/2021.2/Documentation/ScriptReference/Profiling.FrameDataView.GetSessionMetaData.html

结论

本文介绍了怎样自定义性能指标、扩展 Unity Profiler。我们还了解我们怎样用 Profiling.Core 的 Profiler 计量器来添加自定义指标。然后还探索了如何用 Profiler Module Editor 和 Profiler Module API 在窗口中添加自定义模块。最后,我们又解释了怎样向 Profiler 发送图片等额外数据作背景参考。

Profiling.Core:

https://docs.unity3d.com/Packages/com.unity.profiling.core@1.0/manual/profilercounter-guide.html

希望这些扩展功能可以帮助你更好地检测和理解应用的性能。

Unity 官方微信

第一时间了解Unity引擎动向,学习最新开发技巧

每一个“在看”,都是我们前进的动力

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
正式离队,国足离队3人曝光,两人摊牌发声,郑智看懂了

正式离队,国足离队3人曝光,两人摊牌发声,郑智看懂了

东球弟
2024-06-19 15:14:56
英格兰内讧升级!英超mvp不满1.8亿巨星,名宿调解,凯恩成牺牲品

英格兰内讧升级!英超mvp不满1.8亿巨星,名宿调解,凯恩成牺牲品

阿泰希特
2024-06-19 11:49:54
出卖孟晚舟的真凶被挖出来后,如今遭到了哪些报应?

出卖孟晚舟的真凶被挖出来后,如今遭到了哪些报应?

老白调研室
2024-01-23 12:11:51
1775名士兵当场被消灭 数百件重型装备直接炸成废铁:现场惨烈!

1775名士兵当场被消灭 数百件重型装备直接炸成废铁:现场惨烈!

聚峰军评
2024-06-18 08:38:30
闹大!雷军发洗车视频,狂吹自家洗车器,正式带货,网友彻底炸锅

闹大!雷军发洗车视频,狂吹自家洗车器,正式带货,网友彻底炸锅

鑫鑫说说
2024-06-18 14:55:14
阿斯:皇马拥有先进面罩技术&担忧姆巴佩,但他们现在无权介入

阿斯:皇马拥有先进面罩技术&担忧姆巴佩,但他们现在无权介入

直播吧
2024-06-19 13:49:13
白宫:将宣布新制裁打击胡塞武装,他们行为极其鲁莽,对巴人毫不关心

白宫:将宣布新制裁打击胡塞武装,他们行为极其鲁莽,对巴人毫不关心

凤凰卫视
2024-06-18 17:27:21
创业板指跌逾1% 下跌个股近3800只

创业板指跌逾1% 下跌个股近3800只

每日经济新闻
2024-06-19 10:30:07
美媒:印度外交政策将发生重大转变?

美媒:印度外交政策将发生重大转变?

参考消息
2024-06-19 16:29:20
快船3消息!首笔签约达成,缴纳1.42亿奢侈税,乔治获2.12亿报价

快船3消息!首笔签约达成,缴纳1.42亿奢侈税,乔治获2.12亿报价

体坛小李
2024-06-19 14:52:33
比亚迪要把车险价格打下来了!博主:24万元腾势N7首年保费仅6500元,同价位宝马首年保费通常超万元

比亚迪要把车险价格打下来了!博主:24万元腾势N7首年保费仅6500元,同价位宝马首年保费通常超万元

和讯网
2024-06-19 10:25:51
刚刚,有人为我们捍卫了最后的底线!

刚刚,有人为我们捍卫了最后的底线!

一个坏土豆
2024-06-17 20:36:12
饿一饿能多活20年?科学家发现:饥饿时,细胞会自己“吃掉”自己

饿一饿能多活20年?科学家发现:饥饿时,细胞会自己“吃掉”自己

39健康网
2024-06-18 19:00:02
贵州男子失控砍妻17刀!还发疯怒骂,知情人曝更多内幕

贵州男子失控砍妻17刀!还发疯怒骂,知情人曝更多内幕

林大师热点
2024-06-18 09:40:55
一男子怀疑妻子出轨,特意带她出国体验异域按摩,结果双方沦陷

一男子怀疑妻子出轨,特意带她出国体验异域按摩,结果双方沦陷

亲爱的落落
2024-05-07 16:58:09
夏洛特眼里没光,跟凯特看阅兵仪式紧绷脸,被妈妈弄头发无回应

夏洛特眼里没光,跟凯特看阅兵仪式紧绷脸,被妈妈弄头发无回应

欢乐大意
2024-06-18 23:59:03
中国校花在美国留学,却偷偷带两个白人男子回宿舍,闺蜜:要自爱

中国校花在美国留学,却偷偷带两个白人男子回宿舍,闺蜜:要自爱

爱讲故事的猪头
2023-09-06 17:13:07
广汽本田裁员名额被抢空,部分员工早已计划跳槽到造车新势力

广汽本田裁员名额被抢空,部分员工早已计划跳槽到造车新势力

界面新闻
2024-06-19 16:37:15
高峰:抛弃那英和刚出生的儿子,19年过去了,他如今过得怎样了?

高峰:抛弃那英和刚出生的儿子,19年过去了,他如今过得怎样了?

娱乐白名单
2024-06-17 11:25:41
张纪中老婆凌晨3点想吃羊肉串,全家摸黑飞新疆,把杜星霖宠上天

张纪中老婆凌晨3点想吃羊肉串,全家摸黑飞新疆,把杜星霖宠上天

鑫鑫说说
2024-06-18 10:03:59
2024-06-19 19:18:44
Unity
Unity
Unity中国官方帐户
2138文章数 6700关注度
往期回顾 全部

科技要闻

英伟达超越苹果、微软登顶全球新股王

头条要闻

胖东来"爆改"的永辉超市营业挤满顾客:员工月薪涨千元

头条要闻

胖东来"爆改"的永辉超市营业挤满顾客:员工月薪涨千元

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

深化科创板改革 证监会发布八条措施

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

健康
家居
手机
艺术
军事航空

晚餐不吃or吃七分饱,哪种更减肥?

家居要闻

自然开放 实现灵动可变空间

手机要闻

618冲刺时刻,Reno12系列记录你的鲜活live

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

军事要闻

美国务卿:除部分炸弹 其他对以武器援助均在正常运输

无障碍浏览 进入关怀版