包含此页的版本:
不含此页的版本:
UI 工具包分析器帮助您优化游戏的窗口。它显示了在游戏的各个领域花费了多少时间。例如,它可以报告渲染、动画制作或游戏逻辑所花费的时间百分比。更多信息
请参阅术语表标记可帮助您监控界面性能。标记提供有关渲染和更新 UI 所花费的时间的详细信息。您可以使用标记来识别性能瓶颈并优化 UI 元素。
要打开“分析器”窗口,请转到“窗口>分析”,然后选择所需的选项。有关更多信息,请参阅 Unity Profiler。
UI Toolkit对运行时和编辑器UI使用相同的核心性能分析器标记,但某些标记特定于编辑器UI。
在运行模式下进行分析时,分析器会根据运行时循环中所述,为游戏中使用的每个面板设置显示这些标记。在编辑器模式下,分析器会为当前打开的每个编辑器窗口显示这些标记,如编辑器循环中概述的那样。
注意:UI 工具包标记在性能分析器中显示帧之间的不同时间。这是因为 UI Toolkit 会缓存以前的计算,并尝试仅处理已更改的内容。
高级标记可帮助您找到 UI Toolkit 的特定用途,每个标记代表 UI Toolkit 内部更新循环的高级阶段。每个标记都以面板名称为前缀。
在下表中,<panel-name>指编辑器窗口名称或面板设置资产名称。
| 标记 | 高级阶段 |
|---|---|
<panel-name>.TickScheduledActions (滴答计划作)(仅供编辑使用) |
将作安排为以 10 毫秒的间隔运行。 |
<panel-name>.TickScheduledActions预布局(仅限运行时) |
在验证布局之前安排定期运行的作。 |
<panel-name>.TickScheduledActionsPostLayout(仅限运行时) |
计划在验证布局后定期运行作。 |
<panel-name>.验证布局 |
计算面板中视觉元素的位置。 对于编辑器UI,仅当自上一帧以来修改了视觉元素、处理了事件或请求了EditorWindow重新绘制时,才会发生这种情况。 对于运行时 UI,这每帧都会发生。 |
<panel-name>.准备重绘 |
计算面板中视觉元素的渲染数据。 如果影响其位置的元素的属性在 ValidateLayout阶段,则PrepareRepaintphase 计算新位置。对于编辑器UI,仅当自请求上一帧或EditorWindow重新绘制以来修改了视觉元素时,才会发生这种情况。 对于运行时 UI,这每帧都会发生。 |
<panel-name>.呈现 |
绘制面板。如果未对视觉元素进行任何更改,则此标记的成本在帧中保持稳定。 对于编辑器UI,仅当自请求上一帧或EditorWindow重新绘制以来修改了视觉元素时,才会发生这种情况。 对于运行时 UI,这每帧都会发生。 |
核心标记表示 UI Toolkit 的内部更新循环。它们对于运行时和编辑器UI都是相同的。
| 标记 | 花费的时间 |
|---|---|
| UIElements.PickAll | 识别指针下方或悬停的元素。 |
| UIElements.UpdateRuntimeBindings | 更新运行时绑定。 |
| UIElements.UpdateStyle | 应用样式表并计算元素的解析样式。 |
| UIElements.UpdateLayout | 计算和更新每个元素的布局位置。这包括调用GeometryChangedEvent回调。 |
| UIElements.UpdateAnimation | 更新动画。 |
| UIElements.UpdateRenderData | 准备用于渲染面板的图形数据。这包括调用VisualElement.generateVisualContents回调。 |
| UIR。拉链 | 绘制面板。如果未对元素进行任何更改,则此标记的成本在帧中保持稳定。 |
<class-name>.立即重绘 |
绘制自定义即时模式元素。成本在帧之间保持稳定,但取决于自定义元素的实现。 |
仅当在编辑器(编辑器UI或游戏视图中的运行时UI)中运行的UI(编辑器UI或运行时UI)时,才会显示以下标记。
| 标记 | 花费的时间 |
|---|---|
| UIElements.UpdateEditorBindings | 处理序列化对象绑定请求。 |
| UIElements.UpdateViewData | 将属性应用于使用 ViewData 的元素。 |
| UIElements.UpdateAssetsInEditor | 检查此面板中使用的资产是否已更改。运行时和编辑器UI都会发生这种情况,但仅当为面板启用了实时重载时才会执行工作。 |
| IMGUI接口 / OnGUI | 更新 IMGUIContainer 元素。OnGUI 是调用 IMGUI 代码所花费的时间,区别在于开销。成本在帧之间保持稳定,但取决于 IMGUI 回调的实际实现。 |
UI Toolkit 的运行时 UI 更新循环在每一帧执行相同的作。每个活动面板由具有一个或多个UI文档的面板设置驱动,都有自己的高级标记。
面板的延迟更新前循环发生在MonoBehaviour.LateUpdate()回调,分为三个主要阶段:TickScheduledActionsPreLayout,ValidateLayout和TickScheduledActionsPostLayout.
以下屏幕截图显示了PreLateUpdate.UIElementsUpdatePanels标记:
下表列出了为每个阶段调用的标记序列:
| 标记 | 序列 |
|---|---|
<panel-name>.TickScheduledActions预布局 |
|
<panel-name>.验证布局 |
|
<panel-name>.TickScheduledActionsPostLayout |
|
面板的延迟更新后循环发生在MonoBehaviour.LateUpdate()回调,并且只有PrepareRepaint阶段。
以下屏幕截图显示了PostLateUpdate.UIElementsRepaintPanels标记:
下表列出了为PrepareRepaint阶段:
| 标记 | 序列 |
|---|---|
<panel-name>.准备重绘 |
|
这UI.RenderOverlaysmarker 在PostLateUpdate.UIElementsRepaintPanels.它会在主面板内容的顶部绘制叠加元素。
以下屏幕截图显示了UI.RenderOverlays标记:
注意:此捕获来自使用 Universal 的项目渲染管线获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管线中进行选择,或编写自己的渲染管线。更多信息
请参阅术语表.如果你使用内置的渲染管线,UI.RenderOverlays出现在不同的标记下。
下表列出了为Render阶段:
| 标记 | 序列 |
|---|---|
<panel-name>.呈现 |
|
UI Toolkit 的编辑器 UI 更新循环不会每帧运行一次。某些作被安排为每 10 毫秒运行一次,而输入事件处理则由用户交互驱动。仅在必要时或使用EditorWindow.Repaint(). 每EditorWindow有一个带有自己的高级标记的面板。
计划作每 10 毫秒处理一次。以下屏幕截图显示了Scheduler.Tick标记:
下表列出了为TickScheduledActions阶段:
| 标记 | 序列 |
|---|---|
<panel-name>.TickScheduledActions (滴答计划作) |
|
<window-name>.<mouse-event-name>处理鼠标事件时,将调用 UIElementsUtility.DoDispatch 标记来处理该事件。该事件分为两个主要阶段:UIElementsUtility.DoDispatch和ValidateLayout.
以下屏幕截图显示了示例的层次结构<window-name>.<mouse-event-name>标记:
InspectorWindow.MouseMove标记下表列出了为每个阶段调用的标记序列:
| 标记 | 序列 |
|---|---|
<panel-name>.验证布局 |
|
| UIElementsUtility.DoDispatch | UIElements.PickAll |
<window-name>. 油漆请求 EditorWindow 重绘时,将调用 UIElementsUtility.DoDispatch 标记来处理重绘。重绘分为两个主要阶段:Render和PrepareRepaint.
以下屏幕截图显示了示例的层次结构<window-name>.Repaint标记:
InspectorWindow.Repaint标记下表列出了为每个阶段调用的标记序列:
| 标记 | 序列 |
|---|---|
<panel-name>.准备重绘 |
|
<panel-name>.呈现 |
|