Version: 6000.3
语言: 中文
UI 工具包调试器
使用事件调试器检查 UI 工具包事件

UI Toolkit 探查器标记

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文档的面板设置驱动,都有自己的高级标记。

PreLateUpdate.UIElementsUpdatePanels

面板的延迟更新前循环发生在MonoBehaviour.LateUpdate()回调,分为三个主要阶段:TickScheduledActionsPreLayout,ValidateLayoutTickScheduledActionsPostLayout.

以下屏幕截图显示了PreLateUpdate.UIElementsUpdatePanels标记:

PreLateUpdate.UIElementsUpdatePanels 标记
PreLateUpdate.UIElementsUpdatePanels 标记

下表列出了为每个阶段调用的标记序列:

标记 序列
<panel-name>.TickScheduledActions预布局
  1. 更新计划项
  2. 更新焦点
  3. UIElements.UpdateAssetsInEditor
<panel-name>.验证布局
  1. UIElements.UpdateStyle
  2. UIElements.UpdateLayout
  3. UIElements.UpdateBounds、UIElements.PickAll(
    如果指针已移动)
<panel-name>.TickScheduledActionsPostLayout
  1. UIElements.UpdateAnimation
  2. UIElements.UpdateEditorBindings

PostLateUpdate.UIElementsRepaintPanels

面板的延迟更新后循环发生在MonoBehaviour.LateUpdate()回调,并且只有PrepareRepaint阶段。

以下屏幕截图显示了PostLateUpdate.UIElementsRepaintPanels标记:

PostLateUpdate.UIElementsRepaintPanels 标记
PostLateUpdate.UIElementsRepaintPanels 标记

下表列出了为PrepareRepaint阶段:

标记 序列
<panel-name>.准备重绘
  1. UIElements.UpdateViewData
  2. UIElements.UpdateRuntimeBindings
  3. UIElements.UpdateStyle
  4. UIElements.UpdateLayout
  5. UIElements.UpdateBounds、UIElements.PickAll(
    如果指针已移动)
  6. UIElements.UpdateRenderData

用户界面。渲染叠加(RenderOverlays)

UI.RenderOverlaysmarker 在PostLateUpdate.UIElementsRepaintPanels.它会在主面板内容的顶部绘制叠加元素。

以下屏幕截图显示了UI.RenderOverlays标记:

用户界面。RenderOverlays 标记
用户界面。RenderOverlays 标记

注意:此捕获来自使用 Universal 的项目渲染管线获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管线中进行选择,或编写自己的渲染管线。更多信息
请参阅术语表
.如果你使用内置的渲染管线,UI.RenderOverlays出现在不同的标记下。

下表列出了为Render阶段:

标记 序列
<panel-name>.呈现
  • UIR 中。DrawChain 绘制 UI 工具包内容。
  • 如果使用“即时”模式元素,<class-name>. ImmediateRepaint 处理绘图。

编辑器循环

UI Toolkit 的编辑器 UI 更新循环不会每帧运行一次。某些作被安排为每 10 毫秒运行一次,而输入事件处理则由用户交互驱动。仅在必要时或使用EditorWindow.Repaint(). 每EditorWindow有一个带有自己的高级标记的面板。

调度器.Tick

计划作每 10 毫秒处理一次。以下屏幕截图显示了Scheduler.Tick标记:

Scheduler.Tick 标记
Scheduler.Tick 标记

下表列出了为TickScheduledActions阶段:

标记 序列
<panel-name>.TickScheduledActions (滴答计划作)
  1. UIElements.UpdateAssetsInEditor
  2. 更新计划项
  3. 更新焦点
  4. UIElements.UpdateRuntimeBindings
  5. UIElements.UpdateAnimation
  6. UIElements.UpdateEditorBindings

<window-name>.<mouse-event-name>

处理鼠标事件时,将调用 UIElementsUtility.DoDispatch 标记来处理该事件。该事件分为两个主要阶段:UIElementsUtility.DoDispatchValidateLayout.

以下屏幕截图显示了示例的层次结构<window-name>.<mouse-event-name>标记:

InspectorWindow.MouseMove 标记
InspectorWindow.MouseMove标记

下表列出了为每个阶段调用的标记序列:

标记 序列
<panel-name>.验证布局
  1. UIElements.UpdateStyle
  2. UIElements.UpdateLayout
  3. UIElements.UpdateBounds、UIElements.PickAll(
    如果指针已移动)
    UIElements.UpdateStyle(如果悬停元素已更改)
UIElementsUtility.DoDispatch UIElements.PickAll

<window-name>. 油漆

请求 EditorWindow 重绘时,将调用 UIElementsUtility.DoDispatch 标记来处理重绘。重绘分为两个主要阶段:RenderPrepareRepaint.

以下屏幕截图显示了示例的层次结构<window-name>.Repaint标记:

InspectorWindow.Repaint 标记
InspectorWindow.Repaint标记

下表列出了为每个阶段调用的标记序列:

标记 序列
<panel-name>.准备重绘
  1. UIElements.UpdateViewData
  2. UIElements.UpdateStyle
  3. UIElements.UpdateLayout
  4. UIElements.UpdateBounds、UIElements.PickAll(
    如果指针已移动)
    UIElements.UpdateStyle(如果悬停元素已更改)
  5. UIElements.UpdateRenderData
<panel-name>.呈现
  • UIR 中。DrawChain 绘制 UI 工具包内容。
  • 如果您使用IMGUIContainers,则显示 IMGUIContainer 标记,每个标记下方有两个 OnGUI 标记。
  • 如果使用“即时”模式元素,<class-name>. ImmediateRepaint 处理绘图。

其他资源

UI 工具包调试器
使用事件调试器检查 UI 工具包事件