失效框

概述如何使用失效框来优化 UI 控件。

Windows
MacOS
Linux

该功能仍处于开发中,其被视为 实验性 的功能。因此某些功能可能会无法按照预期工作。

On this page

描述

封装在失效框中的控件可以令子控件几何图形进行缓存,以加快平板的渲染速度。任何由无效框缓存的控件都不会进行预处理、绘图或上色。

总的来说,如果想要优化项目,那么将特定的控件封装在无效框中可能会提升性能(特别是对于移动项目或复杂的 UI 显示)。对于并非不断变化的控件,可以将其放置在无效框中缓存,而不需要在上色、绘图或预处理过程中考虑这样的控件。

但是如果控件发生改变,它将变为无效,而您需要手动将缓存无效化处理(本质上是将其丢弃),强制其在下一个上色过程中重新绘制。控件有任何视觉外观上的改变都需要进行无效化处理。唯一的例外情况是这些控件的外观变化没有存储在控件的顶点缓冲区中(例如材质,更改材质参数不需要将控件做无效化处理)。

细节

在所放置的 无效框细节 面板中,可以对一些属于该控件的特定选项进行设置:

InvalidationBox.png

选项

描述

缓存相对转换

缓存子绘制元素相对于无效框的位置,会在逐帧绘制它们时增加额外开销。但是,在无效框的位置会逐帧发生变化的情况下,这会节省很多资源。

易变

如果为真,则会防止控件或其子控件的图形以及布局信息进行缓存。如果控件会逐帧发生改变,但您仍希望该控件处于无效面板中,则应该将其设置为易变,而不是逐帧对其进行无效化处理(后者会导致无效面板无法缓存任何内容)。

对于 易变 复选框,任何控件都可以设置为易变。易变控件类似于未经无效化处理的正常 Slate 控件。这些控件(包括其子控件)都会逐帧重新绘制。与无效面板相结合时,您只需考虑重新绘制 UI 中最为动态的部分,因为对整个面板进行无效化处理将是一项巨大的开销。

函数

使用 无效框 时,用户可以通过 C++ 或 Invalidate Layout And Volatility 节点(下图所示)在子控件上调用 Invalidate 以强制进行无效化。

BPInvalidateNode.png

目前,某些核心控件会在特定的属性发生更改时自动这样做,今后将会有更多控件支持这项功能。

调试

可以使用控件反映器 (CTRL+Shift+W) 并单击 无效调试 选项来调试无效框。

点击查看全图。

打开控件反映器并开启无效调试后,会看到以下内容:

  • 白色/红色闪动 - 这是控件针对无效化做出的回应。

  • 绿色边界 - 针对无效面板(已缓存该帧)。

  • 红色边界 - 针对无效面板(该帧的缓存已无效化处理)。

  • 黄色虚线边界 - 这些标识了易变控件。

ExampleDebugging.png

上图中,一个标记为易变的图像位于边界内,同时封装在一个无效框中。由于图像已标记为易变,游戏过程中在边界(或任何其他想要显示在图像周围且保持不变的图形资产)进行缓存时,该图像可以动态更新。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback