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

提示
创作 UnityUI 时很容易造成性能瓶颈。 在创建复杂的 UnityUI 布局之前,建议阅读此教程。
示例
有关为 UnityUI 生成的各种组件的演示,请参阅 UnityUI 示例。
UI 行为组件
以下组件可帮助呈现 UI,但它们不是可见的图形组件。
ScaleMeshEffect
在 UnityUI 组件上,unity_ObjectToWorld 矩阵(或 URP 中的 UNITY_MATRIX_M)不是图形组件所在的本地变换的变换矩阵,而是其父画布的变换矩阵。 图形工具中的许多着色器效果需要知道对象比例。 为解决此问题,ScaleMeshEffect.cs 会在构造 UI 网格期间将比例信息存储到 UV 通道属性中。
提示
图形工具中的 Canvas 或 CanvasRenderer 会根据需要提示添加 ScaleMeshEffect.cs。
RectMask2DFast
UnityUI 有一个名为 RectMask2D 的内置组件。 通常,此组件用于遮罩较大区域的一小部分。 遮罩许多对象时,此过程可能需要相当长的时间才能在 CPU 上剔除对象。 为避免此瓶颈,图形工具包含了一个 RectMask2DFast 组件。
RectMask2DFast 的工作方式与 RectMask2D 相同,建议用于替代后者。 如果在 RectMask2DFast 中添加或删除对象后遇到遮罩无法更新的问题,则可能需要手动调用更新命令,如下所示:
myRectMask2DFast.ForceClip = true;
所有“图形工具/画布”着色器和“图形工具/标准画布”着色器都支持 RectMask2D、RectMask2DFast 和 RoundedRectMask2D。
注意
“图形工具/画布”着色器和“图形工具/标准画布”着色器不支持 RectMask2D 或 RectMask2DFast. 上的 Softness 属性
RoundedRectMask2D
RoundedRectMask2D 派生自 RectMask2DFast 并且行为类似。 唯一的差别是 RoundedRectMask2D 包含圆角的角半径值。 可为所有角或者单独为每个角选择此半径。

注意
材料实例化必须由用户控制。 即,共享材料可以受 RoundedRectMask2D 的影响。
UI 图形组件
以下图形组件可帮助将 3D 维数添加到画布。
CanvasElementRoundedRect
此组件以程序方式生成一个 3D 圆角矩形网格,该网格随后将分配到画布的顶点流。 通常,此组件用于通过“图形工具/画布/背板”着色器生成背板网格。

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

CanvasElementMesh
Unity 的 MeshRenderer 组件可用于在 UnityUI 中显示 3D 网格,但它不遵循 UnityUI 提供的某些布局功能。 CanvasElementMesh 组件可以解决这些布局问题。
CanvasElementMesh 组件采用输入网格并将其转换为 Graphic 组件。

重要
必须为输入网格启用其 Read/Write 属性,以便可以在脚本中读取顶点。
动画
若要为 UnityUI 材料属性制作动画,可以使用 CanvasMaterialAnimator... 类。 有关详细信息,请参阅动画文档。
菜单项
为了帮助创建 UI 布局,图形工具中提供了几个菜单项。
从定位点转到角,从角转到定位点
使用“窗口”>“图形工具”>“画布定位点”>“从定位点转到角”和“窗口”>“图形工具”>“画布定位点”>“从角转到定位点”,可以 RectTransform 固有的固定系统和定位点(约束)系统中来回切换布局表达方式。 在响应式和固定比例布局之间移动时,这可能很有用。