Unity3D :Unity 中 UI 系统的对比
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
Unity 中 UI 系统的对比
Unity 打算让 UI 工具包成为新 UI 开发项目的推荐 UI 系统,但它仍然缺少 Unity UI (uGUI) 和 IMGUI 中的一些功能。这些较旧的系统更适合某些用例,并且需要支持遗留项目。
本页面提供了 UI 工具包、Unity UI 和 IMGUI 的高级功能比较,以及有关它们各自的 UI 设计方法的说明。使用该内容可帮助确定哪种 UI 系统适合您的项目。
重要 |
---|
UI 工具包正在积极开发中。本页面将随着功能集的发展而频繁更新。 |
一般考虑因素
UI 的类型:编辑器或运行时
对 UI 系统的选择取决于是为 Unity 编辑器开发 UI,还是为游戏或应用程序开发运行时 UI。
UI 的类型 | UI 工具包 | Unity UI(uGUI) | IMGUI | 注意事项 |
---|---|---|---|---|
运行时(游戏内) | ✔ | ✔ | 不推荐 | 出于性能原因,Unity 不推荐将 IMGUI 用于游戏内运行时 UI。 |
Unity Editor | ✔ | ❌ | ✔ | You can’t use Unity UI to make UI for the Unity Editor. |
若要创建运行时 UI,可在 UI 工具包与 Unity UI (uGUI) 之间进行选择。请参阅功能比较:UI 工具包与 Unity UI (uGUI)。
若要为 Unity 编辑器创建 UI,可在 UI 工具包与 IMGUI 之间进行选择。请参阅功能比较:UI 工具包与 IMGUI。
角色和技能集
团队的技能集以及对不同技术的习惯程度也是一个重要的考虑因素。
用户的类型 | UI 工具包 | Unity UI (uGUI) | IMGUI | 注意事项 |
---|---|---|---|---|
程序员 | ✔ | ✔ | ✔ | 程序员可以使用任何游戏开发工具或 API。 |
技术美术师 | 部分支持 | ✔ | ❌ | 熟悉 Unity 基于游戏对象的工具和工作流程的技术美术师可能会习惯使用游戏对象、组件和 Scene 视图。 他们可能不习惯 UI 工具包类似于 Web 的方法或 IMGUI 的纯 C# 方法。 |
UI 设计师 | ✔ | 部分支持 | ❌ | 熟悉 UI 创建工具的 UI 设计师可能会习惯 UI 工具包基于文档的方法。 如果他们不熟悉基于游戏对象的工作流程,则可能需要程序员和/或关卡设计师提供帮助。 |
创新和开发
UI 工具包正在积极开发中。Unity 会在每个版本中添加新功能。Unity UI 和 IMGUI 是成熟的 UI 系统,它们已经过生产验证,不过很少更新。
如果需要 UI 工具包中尚未提供的功能,或者计划支持或重用较旧的 UI 内容,则 Unity UI 和 IMGUI 可能是更好的选择。
功能比较:UI 工具包与 Unity UI (uGUI)
此部分将 UI 工具包与 Unity UI(以及 TextMesh Pro 包)进行比较,以便为游戏和应用程序开发运行时 UI。
- Unity 编辑器 UI 开发
- 工作流程
- 样式
- 布局
- 事件
- 渲染
- 动画
- 可定制性
Unity 编辑器 UI 开发
It’s not possible to develop user interfaces for the Unity Editor using Unity UI.
工作流程
功能 | UI 工具包 | UGUI+TMP | 注意事项 |
---|---|---|---|
嵌套预制件 | 部分支持 | ✔ | UI 工具包的 UXML 模板支持属性覆盖,类似于 Unity 预制件系统中的已修改属性。 UGUI 基于游戏对象,支持标准 Unity 预制件。 |
所见即所得的创作 | ✔ | ✔ | Unity UI 和 UI 工具包提供不同的所见即所得的创作体验。 由于 Unity UI 是基于游戏对象的,因此您可以为所见即所得的创作设置场景视图。 UI 工具包为基于文档的所见即所得 UI 创作提供了 UI 生成器,具有类似 Web 的工作流。 |
主题化 | 计划 | ❌ | UI 工具包路线图包括通过 UI Builder 和 USS 导入支持主题功能。 |
布局和样式调试器 | ✔ | ✔ | 可以在 Inspector 窗口中调试 Unity UI 界面。 UI 工具包提供一个专用的调试器(菜单:Window > UI Toolkit > Debugger),类似于主要 Web 浏览器中的调试工具。 |
场景集成 | ✔ | ✔ | Unity UI 游戏对象在“场景”视图和“游戏”视图中可见。 您可以通过运行时组件集成使用 UI 工具包创建的运行时 UI,并将其显示在“游戏”视图中。 |
样式
功能 | UI 工具包 | UGUI+TMP | 注意事项 |
---|---|---|---|
内联样式 | ✔ | ✔ | |
层叠样式 | ✔ | ❌ | |
伪状态(例如,悬停或激活) | ✔ | ✔ | Unity UI 提供简单的伪状态,您可以使用 Unity 的动画图为其创建复杂的伪状态。 UI 工具包通过 USS 支持伪状态。 |
富文本标签 | 计划 | ✔ | UI 工具包中的富文本标记支持计划作为 Unity 文本渲染后端更新的一部分。 默认情况下,Unity UI 支持一组基本的富文本标签,并通过 TextMesh Pro 包支持更大的一组富文本标签。 |
SDF 文本 | 计划 | ✔ | UI 工具包中的 SDF 文本支持计划作为 Unity 文本渲染后端大修的一部分。 Unity UI 通过 TextMesh Pro 包支持 SDF 文本。 |
字体后备 | 计划 | ✔ | UI 工具包中对字体资源和回退字体的支持计划作为 Unity 文本渲染后端大修的一部分。 Unity UI 通过 TextMesh Pro 包支持回退字体。 |
布局
虽然 Unity UI 和 UI 工具包提供相同的布局可能性,但其布局系统大不相同。
- 借助 Unity UI,可以使用 RectTransForm 组件在游戏对象级别上控制布局。
- 借助 UI 工具包,可以在 USS 样式表中定义布局,使用更类似于 Web 的基于 Flexbox 的布局系统。
功能 | UI 工具包 | UGUI+TMP | 注意事项 |
---|---|---|---|
手动布局(绝对或相对于父项) | ✔ | ✔ | |
一维(水平和垂直) | ✔ | ✔ | |
二维(网格) | 研究 | ✔ | Unity UI 提供 GridLayoutGroup 组件。 对于 UI 工具包,Unity 在研究在 USS 中实现 CSS 样式网格的可能性。 |
事件
功能 | UI 工具包 | UGUI+TMP | 注意事项 |
---|---|---|---|
与 Unity 新输入系统集成 | 计划 | ✔ | |
序列化事件 | 计划 | ✔ | UI 工具包只能在 C# 中将事件绑定到元素。 Unity UI 可以序列化事件绑定。 |
事件的可视化脚本 | 研究 | ❌ |
Rendering
在 UI 工具包与 Unity UI 之间进行选择是高性能与多功能性/支持的功能之间的权衡。
UI 工具包目前支持较少的功能集,但更易于优化呈现性能。它基于文档,数据驱动,并使用单个着色器、材质和纹理图集来绘制元素层次结构。对于包含复杂元素层次结构的简单屏幕空间 UI(例如,菜单或平视显示器),它是一个不错的选择,并且在任何平台上都表现良好。
Unity UI 的功能更多,并支持高级渲染和文本功能。可以使用自定义材质设置任何视觉元素,并利用高级裁剪和遮罩功能。但是,这些功能可能会使得难以在性能预算内保持更复杂的 UI。
功能 | UI 工具包 | UGUI+TMP | 注意事项 |
---|---|---|---|
支持内置渲染管线 | ✔ | ✔ | |
支持通用渲染管线 (URP) | ✔ | ✔ | |
支持高清渲染管线 (HDRP) | ✔ | ✔ | |
屏幕空间 (2D) 渲染 | ✔ | ✔ | |
世界空间 (3D) 渲染 | 计划 | ✔ | |
自定义材质和着色器 | 计划 | ✔ | |
Shader Graph 集成 | 计划 | ❌ | |
SVG 集成 | 计划 | 计划 | com.unity.vectorgraphics 包为 Unity UI 提供 SVG 支持。但是,该包当前处于预览版,不建议用于生产。 |
Antialiasing | 计划 | 部分支持 | Unity UI 的屏幕空间 - 摄像机和世界空间渲染模式使用应用抗锯齿的摄像机。 |
2D 旋转(对象保持在 UI 平面上) | ✔ | ✔ | |
3D 旋转 | 计划 | ✔ | |
矩形裁剪 | 部分支持 | ✔ | UI 工具包支持不带旋转的矩形裁剪。矩形必须轴对齐。 |
遮罩裁剪 | 部分支持 | ✔ | UI 工具包支持带 2D 旋转的遮罩裁剪。 Unity UI 支持 3D 遮罩旋转。 |
嵌套遮罩 | 部分支持/计划 | ✔ | UI 工具包的嵌套掩码仅限于一个级别,但不会影响绘制调用批处理。计划多级嵌套掩码。 Unity UI 最多支持八个级别的嵌套遮罩,但每隔一个级别就会中断绘制调用批处理。 |
Animation
功能 | UI 工具包 | UGUI+TMP | 注意事项 |
---|---|---|---|
补间工作流程 | Experimental | 部分支持 | |
与动画剪辑和时间轴集成 | 计划 | ✔ |
可定制性
功能 | UI 工具包 | UGUI+TMP | 注意 |
---|---|---|---|
开源/可定制 | 计划 | ✔ | UI Toolkit is customizable. |
功能比较:UI 工具包与 IMGUI
此部分将 UI 工具包与 IMGUI 进行比较,以便为 Unity 编辑器开发用户界面。
- Inspector 集成
- 控件和数据绑定
- 工作流程
- 样式
- 布局
- 事件
- 渲染
- 动画
- 可定制性
Inspector 集成
Feature | UI Toolkit | IMGUI | Notes |
---|---|---|---|
Default Inspectors | Planned | ✔ | UI 工具包将成为检查器窗口的默认 UI 后端(当类型没有自定义编辑器时)。 |
Inspector: Edit custom object types | ✔ | ✔ | |
Inspector: Edit custom property types | ✔ | ✔ | |
Inspector: Mixed values (multi-editing) support | Planned | ✔ | |
Array / list-view control | Planned | ✔ |
控件和数据绑定
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
树视图 | 计划 | ✔ | |
网格视图 | 计划 | ❌ | |
图形视图 | 计划 | ❌ | |
数据绑定:序列化属性 | ✔ | ✔ | |
来自任何 C# 类型的数据绑定 | 计划 | ❌ | |
到任何属性或样式值的数据绑定 | 计划 | ❌ |
工作流程
Feature | UI Toolkit | IMGUI | Notes |
---|---|---|---|
Nested Prefabs | Partial | ❌ | UI 工具包的 UXML 模板支持属性覆盖,这类似于 Unity 预制件系统中修改的属性。 |
WYSIWYG authoring | ✔ | ❌ | UI 工具包为基于文档的所见即所得 UI 创作提供了 UI 生成器,具有类似 Web 的工作流。 |
Theming | Planned | ✔ | |
Layout & Styling Debugger | ✔ | ✔ | IMGUI对布局和样式的调试工具有限。 UI 工具包提供了一个专用的调试器(菜单:窗口> UI 工具包>调试器),类似于主要 Web 浏览器中的调试工具。 |
Scene View integration | ✔ | ✔ |
样式
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
内联样式 | ✔ | ✔ | |
层叠样式 | ✔ | ❌ | |
伪状态(例如,悬停或激活) | ✔ | 部分支持 | |
富文本标签 | 计划 | ✔ | UI 工具包中的富文本标记支持计划作为 Unity 文本渲染后端更新的一部分。 |
SDF 文本 | 计划 | ❌ | UI 工具包中的 SDF 文本支持计划作为 Unity 文本渲染后端更新的一部分。 |
字体后备 | 计划 | ✔ |
布局
虽然 Unity UI 和 IMGUI 提供相同的布局可能性,但其布局系统大不相同。
- IMGUI 使用基于 C# 的 GUILayout 系统。
- UI 工具包使用更类似于 Web 的基于 Flexbox 的布局系统。可以通过 USS 样式控制布局。
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
手动布局(绝对或相对于父项) | ✔ | ✔ | |
一维(水平和垂直) | ✔ | ✔ | |
二维(网格) | 研究中 | ❌ | 对于 UI 工具包,Unity 在研究在 USS 中实现 CSS 样式网格的可能性。 |
事件
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
与 Unity 新输入系统集成 | 计划 | ❌ | |
序列化事件 | 计划 | ❌ | |
事件的可视化脚本 | 研究 | ❌ |
Rendering
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
支持内置渲染管线 | ✔ | ✔ | |
支持通用渲染管线 (URP) | ✔ | ✔ | |
支持高清渲染管线 (HDRP) | ✔ | ✔ | |
屏幕空间 (2D) 渲染 | ✔ | ✔ | |
世界空间 (3D) 渲染 | 计划 | ❌ | 虽然在技术上可以使用 在 IMGUI 中创建 3D UI,但不建议这样做。GUI.matrix |
自定义材质和着色器 | 计划 | ❌ | |
Shader Graph 集成 | 计划 | ❌ | |
SVG 集成 | 计划 | ❌ | |
抗锯齿 | 计划 | ❌ |
Animation
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
补间工作流程 | Experimental | ❌ | |
与动画剪辑和时间轴集成 | 计划 | ❌ |
可定制性
功能 | UI 工具包 | IMGUI | 注意事项 |
---|---|---|---|
开源/可定制 | 计划 | UI Toolkit is customizable. |
由3D建模学习工作室整理翻译,转载请注明出处!