要分析虚幻引擎4(UE4)项目,开发人员可以在用编辑器中运行(PIE)模式运行游戏的同时,在控制台输入以下 stat命令。
单击查看大图。
要从编辑器的 Stat 菜单中找到stat命令,选择 视口设置(Viewport Setting) 按钮旁边的向下箭头。
单击查看大图。
注意:利用 LOG 命令运行编辑器,开发人员能够从stat 转存 记录有用信息,为此,编辑器(游戏项目)能够利用 LOG 命令(例如 UE4Editor.exe -silent LOG=MyLog.txt)生成日志文件。
Stat命令表
输入 stat 和一个空格,然后输入以下命令,从而激活它们:
| 命令名称 | 命令说明 |
|---|---|
| AI | 显示感知系统和整体AI的性能信息。 |
| AI_EQS | 显示环境查询系统(EQS)的性能、调试和内存统计数据。 |
| AIBehaviorTree | 显示行为树的性能和内存统计数据。 |
| AICrowd | 显示群集管理器的性能和步骤信息。 |
| Anim | 显示每次tick蒙皮网格体需要多长时间进行计算。 |
| AsyncLoad / AsyncLoadGameThread | 显示异步加载的性能统计数据。 |
| Audio / AudioThreadCommands | 音频统计数据,如声波实例或缓冲区性能。 |
| Canvas | 画布统计数据,显示画布用户界面项(例如图块、边框和文本)的性能信息。 |
| Collision / CollisionTags | 显示碰撞的性能、调试和内存信息。 |
| CommandListMarkers | 显示命令列表及命令性能信息。 |
| Component | 显示组件列表及组件性能信息。 |
| Compression | 显示压缩统计数据。 |
| CPULoad | 显示CPU利用率。 |
| CPUStalls | 显示有关CPU停转的信息。 |
| D3D11RHI | 显示Direct3D 11 RHI统计数据。 |
| DDC | 显示派生数据缓存(DDC)统计数据。 |
| DumpHitches | 任何时候基于 t.HitchFrameTimeThreshold 检测到“卡顿”,都会将它写入日志中。 |
| Dumpticks | 关于Tick函数的转储信息。 |
| Engine | 显示一般渲染状态,例如帧时间,以及正在渲染的三角形数量的计数器。 |
| FPS | 显示每秒帧数(FPS)计数器。 |
| Game | 提供有关各个游戏进程Tick需要多长时间的反馈。 |
| GameplayTags | 显示游戏进程标签信息。 |
| GC | 显示垃圾回收统计数据。 |
| GeometryCache | 显示几何体缓存系统的性能和内存统计数据。 |
| GPU | 显示帧的GPU统计数据。 |
| GPUParticles | 显示GPU粒子的性能信息。 |
| Hitches | 设置 t.HitchFrameTimeThreshold 以定义被认为发生卡顿的时长(单位:秒)。还会将所有卡顿转存到日志/visual studio调试,例如 [0327.87] LogEngine:Warning:HITCH @ 00m:01s:643ms,1643,72,2。 |
| IMEWindows | 显示Windows文本输入法系统的信息。 |
| InitViews | 显示有关可见性剔除花费了多长时间以及效果如何的信息。可见分段计数是渲染线程性能方面最重要的一个统计量,它由STAT INITVIEWS下的可见静态网格体元素控制;不过,可见动态原语也有影响。 |
| KismetCompiler | 显示Kismet编译器信息。 |
| KismetReinstancer | 显示Kismet Reinstancer信息。 |
| Levels | 显示关卡流送信息。 |
| LightRendering | 提供有关渲染光照和阴影需要多长时间的反馈。 |
| LinkerCount | 显示连接器计数器。 |
| LinkerLoad | 显示连接器加载信息。 |
| List | 使用 <Groups/Sets/Group><br> 显示统计数据组、保存的集合或者特定组中的统计数据。 |
| LLM | 显示低级内存追踪器(LLM)计数器。 |
| LLMFull | 显示整个LLM计数器组。 |
| LLMOverhead | 显示LLM开销计数器。 |
| LLMPlatform | 显示LLM平台计数器。 |
| LoadTime / LoadTimeVerbose | 显示加载时间性能信息。 |
| MapBuildData | 显示地图的编译数据。 |
| MathVerbose | 显示数学运算的性能信息。 |
| Memory | 显示有关虚幻引擎中各个子系统使用多少内存的统计数据。 |
| MemoryAllocator | 显示内存分配信息。 |
| MemoryPlatform | 显示内存平台信息。 |
| MemoryStaticMesh | 显示有关静态网格体的内存统计数据。 |
| NamedEvents | 为外部分析器启用指定事件。 |
| Navigation | 显示导航系统的性能和内存信息。 |
| NET | 显示网络系统统计数据。 |
| Object / ObjectVerbose | 显示对象内存和性能信息。 |
| Online | 显示在线系统计数器。 |
| Pakfile | 显示Pakfile系统统计数据。 |
| ParallelCommandListMarkers | 显示并行命令列表及并行命令性能信息。 |
| Particles | 显示粒子系统性能信息。 |
| Physics | 显示物理性能统计数据。 |
| PhysXTasks | 显示PhysX任务信息。 |
| PhysXVehicleManager | 显示PhysX载具管理器的统计数据。 |
| PlayerController | 显示玩家控制器性能信息。 |
| Quick | 快速显示总体性能数据组。 |
| RenderTargetPool | 显示渲染目标池的内存和性能统计数据。 |
| RenderThreadCommands | 列出渲染线程命令及性能信息。 |
| RHI | 显示RHI内存和性能统计数据。 |
| RHICMDLIST | 显示RHI命令列表及性能统计数据。 |
| SceneMemory | 显示场景内存计数器。 |
| SceneRendering | 显示一般渲染统计数据。这是一个很好的起点,可以发现渲染过程中性能低下的一般方面。 |
| SceneUpdate | 显示有关更新场景的信息,包括添加、更新和删除光源以及添加和删除场景中的原语所花费的时间。 |
| Script | 显示脚本统计数据。 |
| ShaderCompiling | 显示着色器编译信息。 |
| Shaders | 显示着色器压缩统计数据。 |
| ShadowRendering | 显示阴影计算花费多长时间,该时间不同于 stat LightRendering 中包括的实际阴影渲染时间。 |
| Slate / SlateVerbose | 显示Slate性能统计数据。 |
| SlateMemory | 显示Slate内存计数器。 |
| SoundCues | 显示活动的Sound Cue。 |
| SoundMixes | 显示活动的SoundMix。 |
| Sounds |
|
| SoundWaves | 显示活动的SoundWave。 |
| SplitScreen | 显示分屏信息。 |
| StartFile | 启动统计数据采集,同时在分析目录中创建一个新文件。 注意:利用 stat StopFile 命令停止此操作。 |
| StatSystem | 显示统计系统的性能和内存信息。 |
| StopFile | 完成由 stat StartFile 启动的统计数据采集,同时关闭在分析目录中创建的文件。 |
| Streaming | 显示流送资源的基本统计数据,例如使用了多少内存流送纹理,或者场景中有多少流送纹理。 |
| StreamingDetails | 有关流送的更详细的统计信息,例如将一般纹理流分解为更具体的组(光照贴图、静态纹理和动态纹理)。 |
| StreamingOverview | 显示流送资源的统计数据概述。 |
| TargetPlatform | 显示目标平台信息。 |
| TaskGraphTasks | 显示TaskGraph任务的性能数据。 |
| Text | 显示文本的性能统计数据。 |
| TextureGroup | 显示纹理组内存计数器。 |
| Threading | 显示线程处理信息。 |
| ThreadPoolAsyncTasks | 显示ThreadPool Async任务计数器。 |
| Threads | 显示线程信息。 |
| Tickables | 显示Tickable的性能统计数据。 |
| TickGroups | 显示Tick组的性能统计数据。 |
| UI | 显示UI性能信息。 |
| Unit | 总体帧时间以及游戏线程、渲染线程和GPU时间。 注意:这是一个很好的stat命令,因为它可以帮助开发人员专注于分析工作。 |
| UnitGraph | 要查看包含stat单元数据的图表,使用 stat Raw 查看未过滤数据。 |
| UObjectHash | 显示散列的UObject信息。 |
| UObjects | 显示游戏中UObject的性能统计数据。 |
命令
关卡
单击查看大图。
stat levels 命令显示关卡流送信息,这些信息被分组在固定关卡下。
用例
此命令对于希望查看当前活动关卡列表的开发人员非常有用,包括它们是否可见、预加载、加载或卸载。此外,该命令还显示从加载请求到加载完成需要多少秒。
用法
要查看流送关卡信息,在 PIE控制台 中输入 stat levels。
注意:要确定关卡处于什么状态,请参考下面的关卡颜色代码表。
关卡颜色代码
| 颜色代码 | 说明 |
|---|---|
| 绿色 | 关卡已加载并可见。 |
| 红色 | 关卡已卸载。 |
| 橙色 | 关卡正在变成可见的过程中。 |
| 黄色 | 关卡已加载,但不可见。 |
| 蓝色 | 关卡已卸载,但仍驻留在内存中,当发生垃圾回收时将清除它。 |
| 紫色 | 关卡是预加载的。 |
StartFile
单击查看大图。
stat startfile 命令启动统计数据采集,并在 Profiling 目录中创建一个新文件。通常,引擎将统计数据采集保存在 [UE4ProjectFolder][ProjectName]\Saved\Profiling\UnrealStats 下。
用例
要使用 会话前端分析器 分析项目的性能,采集统计样本并将其记录到 *.ue4stats 文件中。
用法
要采集统计数据并将数据记录到 *.ue4stats 文件中,在 PIE控制台 中输入 stat startfile。
要防止 StartFile 因使用较大的 ue4stats 文件导致磁盘膨胀,请运行 stat StopFile。此外,即使关闭了PIE模式,StartFile也将继续在后台运行,这可能会导致日志文件膨胀,因此请务必运行 StopFile 命令来停止记录项目性能。
加载统计数据
要将统计数据加载到 会话前端分析器 中,请执行以下操作:
-
从虚幻编辑器中,选择 窗口(Window) \> 开发者工具(Developer Tools) \> 会话前端(Session Frontend)。

-
打开 会话前端 后,选择 分析器(Profiler) 选项卡(1),然后单击 加载(Load) (2)。
-
选择
*.ue4stats文件后,单击 打开(Open) 加载该文件。

最终结果
在 会话前端 加载了文件之后,采集数据在分析器 中可见,以便进一步分析。
单击查看大图。
注意:请阅读分析工具参考,了解在 会话前端 中查看分析采集的更多信息。
StopFile
单击查看大图。
stat stopfile 命令停止由 StartFile 命令启动的统计数据采集。此外,StopFile命令还关闭在 Profiling 目录中创建的文件。
用例
要防止 StartFile 因使用较大的 ue4stats 文件导致磁盘膨胀,运行 stat StopFile。此外,即使关闭了PIE模式,StartFile也将继续在后台运行,这可能会导致日志文件膨胀,因此请务必运行 StopFile 命令来停止记录项目性能。
用法
要停止采集和记录统计数据,在 PIE控制台 中输入 stat stopfile。
单元
用例
通常,开发人员想要确定 Game 线程中、Draw(渲染)线程中或 GPU 上是否存在瓶颈(负面性能影响)。
单击查看大图。
stat unit 命令显示项目的 Frame、Game、Draw、GPU、RHIT 和 DynRes 线程的性能信息。
统计数据
| 名称 | 说明 |
|---|---|
| Frame | 帧时是生成一帧游戏内容所花费的总时间。由于Game线程和Draw线程在完成一帧之前保持同步,帧时往往接近其中一个线程中显示的时间。 |
| Game | 如果帧时接近Game线程中显示的时间,则游戏的性能很可能会受到Game线程的阻碍(负面影响)。 |
| Draw | 如果帧时接近Draw线程中显示的时间,则游戏的性能很可能会受到渲染线程的阻碍 |
| GPU | GPU时间用来衡量显卡渲染场景需要多长时间。由于GPU时间会被同步到帧上,它很可能与帧时相同。 |
| RHIT | 通常,RHI线程时间会被同步到帧上,因此它很可能与帧时相同。 |
| DynRes | 如果支持(并启用),DynRes将显示主要屏幕百分比和次要屏幕百分比。 |
用法
要确定项目的瓶颈,在非调试编译中启动游戏,并在 PIE控制台 中输入 stat unit。