UnityUI 工具 - MRTK3

UnityUI 也许不是混合现实开发人员在创建 3D 用户界面时最先想到的工具。 但是,借助一些帮助器组件和实用工具,可以在 UnityUI 中制作美观而灵活的 3D 用户界面。

Unity UI example buttons and sliders

提示

创作 UnityUI 时很容易造成性能瓶颈。 在创建复杂的 UnityUI 布局之前,建议阅读此教程

示例

有关为 UnityUI 生成的各种组件的演示,请参阅 UnityUI 示例

UI 行为组件

以下组件可帮助呈现 UI,但它们不是可见的图形组件。

ScaleMeshEffect

在 UnityUI 组件上,unity_ObjectToWorld 矩阵(或 URP 中的 UNITY_MATRIX_M)不是图形组件所在的本地变换的变换矩阵,而是其父画布的变换矩阵。 图形工具中的许多着色器效果需要知道对象比例。 为解决此问题,ScaleMeshEffect.cs 会在构造 UI 网格期间将比例信息存储到 UV 通道属性中

提示

图形工具中的 CanvasCanvasRenderer 会根据需要提示添加 ScaleMeshEffect.cs

RectMask2DFast

UnityUI 有一个名为 RectMask2D 的内置组件。 通常,此组件用于遮罩较大区域的一小部分。 遮罩许多对象时,此过程可能需要相当长的时间才能在 CPU 上剔除对象。 为避免此瓶颈,图形工具包含了一个 RectMask2DFast 组件。

RectMask2DFast 的工作方式与 RectMask2D 相同,建议用于替代后者。 如果在 RectMask2DFast 中添加或删除对象后遇到遮罩无法更新的问题,则可能需要手动调用更新命令,如下所示:

myRectMask2DFast.ForceClip = true;

所有“图形工具/画布”着色器和“图形工具/标准画布”着色器都支持 RectMask2DRectMask2DFastRoundedRectMask2D

注意

“图形工具/画布”着色器和“图形工具/标准画布”着色器不支持 RectMask2DRectMask2DFast. 上的 Softness 属性

RoundedRectMask2D

RoundedRectMask2D 派生自 RectMask2DFast 并且行为类似。 唯一的差别是 RoundedRectMask2D 包含圆角的角半径值。 可为所有角或者单独为每个角选择此半径。

RoundedRectMask2D example with two images

注意

材料实例化必须由用户控制。 即,共享材料可以受 RoundedRectMask2D 的影响。

UI 图形组件

以下图形组件可帮助将 3D 维数添加到画布。

CanvasElementRoundedRect

此组件以程序方式生成一个 3D 圆角矩形网格,该网格随后将分配到画布的顶点流。 通常,此组件用于通过“图形工具/画布/背板”着色器生成背板网格

CanvasElementRoundedRect example backplate

CanvasElementBeveledRect

CanvasElementRoundedRect 一样,此组件以程序方式生成一个 3D 圆角矩形,但带有斜边。 通常,此组件用于通过“图形工具/画布/斜边”着色器生成背板网格

CanvasElementBeveledRect example

CanvasElementMesh

Unity 的 MeshRenderer 组件可用于在 UnityUI 中显示 3D 网格,但它不遵循 UnityUI 提供的某些布局功能。 CanvasElementMesh 组件可以解决这些布局问题。

CanvasElementMesh 组件采用输入网格并将其转换为 Graphic 组件。

CanvasElementMesh example with rocket

重要

必须为输入网格启用其 Read/Write 属性,以便可以在脚本中读取顶点

动画

若要为 UnityUI 材料属性制作动画,可以使用 CanvasMaterialAnimator... 类。 有关详细信息,请参阅动画文档。

为了帮助创建 UI 布局,图形工具中提供了几个菜单项。

从定位点转到角,从角转到定位点

使用“窗口”>“图形工具”>“画布定位点”>“从定位点转到角”和“窗口”>“图形工具”>“画布定位点”>“从角转到定位点”,可以 RectTransform 固有的固定系统和定位点(约束)系统中来回切换布局表达方式。 在响应式和固定比例布局之间移动时,这可能很有用。

另请参阅