【Unity基础】Unity中的UI系统

Unity中有三种UI系统,分别是IMGUI,Unity UI(uGUI) 和UI工具包(UI Toolkit)。

这三种分别适用于编辑器和运行时UI的设计,但在功能支持上有所侧重。

一、Unity中的UI类型

UI类型有两种:编辑时和运行时

对UI系统的选择取决于是为了Unity编辑器开发UI,还是为游戏或应用程序开发运行时UI。

|--------------|---------------|------------------|---------------|-----------------------------|
| UI类型 | UI工具包 | Unity UI | IMGUI | 注意事项 |
| 运行时(游戏内) | 支持 | 推荐 | 不推荐 | 出于性能原因,不推荐将IMGUI用于游戏内运行时的UI |
| 编辑器 | 推荐 | 不支持 | 支持 | Unity UI不能用于编辑时 |

在最新的Unity 6中,推荐使用UI工具包。但UI工具包中不是支持Unity UI和IMGUI中所有的功能,所以对于某些特殊场景或旧项目还是要选择Unity UI或IMGUI。

不同角色对于UI系统的掌握要求

|------------|---------------|------------------|---------------|-------------------------------------------------------------------------------------|
| 角色 | UI工具包 | Unity UI | IMGUI | 技能 |
| 开发 | 支持 | 支持 | 支持 | 程序员可以使用任何游戏开发工具或API |
| 技术美术 | 部分支持 | 支持 | 不支持 | 熟悉Unity基于游戏对象的工具和工作流程的技术美术师可能会习惯使用游戏对象、组件和Scene视图。他们可能不习惯UI工具包类似于Web的方法或IMGUI的纯C#方法 |
| UI设计师 | 支持 | 部分支持 | 不支持 | 熟悉UI创建工具的UI设计师可能会习惯UI工具包基于文档的方法。 |

二、运行UI

UI工具包是Unity UI的替代方案,适用于创建运行在多种屏幕分辨率上的UI。如果需要以下功能,可以考虑使用UI工具包:

如果有以下需求,则推荐使用Unity UI:

  • 需要大量用户界面内容
  • 为美术师和设计师提供熟悉的创作工作流
  • 提供无纹理的UI渲染能力
  • 在3D场景中定位和照明的UI
  • 使用自定义着色器和材质的特效
  • 从MonoBehaviour中便捷地引用

(一)适用场景

|------------------------|------------|
| Unity 6 | 推荐 |
| 适用多种分辨率的菜单和和复杂UI项目的HUD | UI工具包 |
| 用于世界空间UI和VR应用 | Unity UI |
| 需要自定义着色器和材质的UI | Unity UI |

(二)UI工具包和Unity UI具体功能对比

|--------------|--------------------|------------------|
| 功能 | UI Toolkit | Unity UI |
| 所见即所得的创作 | 是 | 是 |
| 嵌套可重用组件 | 是 | 是 |
| 全局样式管理 | 是 | 否 |
| 布局和样式调试器 | 是 | 是 |
| 场景集成 | 是 | 是 |
| 富文本标签 | 是 | 是* |
| 可缩放文本 | 是 | 是* |
| 字体回退 | 是 | 是* |
| 自适应布局 | 是 | 是 |
| 输入系统支持 | 是 | 是 |
| 序列化事件 | 否 | 是 |
| 视觉脚本支持 | 否 | 是 |
| 兼容渲染管线 | 是 | 是 |
| 屏幕空间(2D)渲染 | 是 | 是 |
| 世界空间(3D)渲染 | 否 | 是 |
| 自定义材质和着色器 | 否 | 是 |
| 精灵/精灵图集支持 | 是 | 是 |
| 动态纹理图集 | 是 | 否 |
| 无纹理元素 | 是 | 否 |
| UI 抗锯齿 | 是 | 否 |
| 矩形裁剪 | 是 | 是 |
| 蒙版裁剪 | 否 | 是 |
| 嵌套蒙版 | 是 | 是 |
| UI 过渡动画 | 是 | 否 |
| 与动画剪辑和时间线的集成 | 否 | 是 |

三、编辑器UI

如果要创建复杂的编辑顺工具,推荐使用UI工具包

  • 更好的可重用性和解耦性
  • 提供可视化工具以创作UI
  • 更好的可扩展性,便于代码维护和性能优化

IMGUI是UI工具包的替代方案,适用于以下情况:

  • 不受限制地访问编辑器的扩展能力
  • 轻量级API,快速在屏幕上渲染UI

(一)适用场景

|-----------------|------------|
| Unity 6 | 推荐 |
| 复杂的编辑器工具 | UI工具包 |
| 属性绘制器 | UI工具包 |
| 与设计师协作 | UI工具包 |

(二)UI工具包与IMGUI具体功能对比

|-----------------|--------------------|---------------|
| 功能 | UI Toolkit | IMGUI |
| 所见即所得的创作 | 是 | 否 |
| 嵌套可重用组件 | 是 | 否 |
| 全局样式管理 | 是 | 是 |
| 布局和样式调试器 | 是 | 否 |
| 富文本标签 | 是 | 是 |
| 可缩放文本 | 是 | 否 |
| 字体回退 | 是 | 是 |
| 自适应布局 | 是 | 是 |
| 默认检查器 | 是 | 是 |
| 检查器:编辑自定义对象类型 | 是 | 是 |
| 检查器:编辑自定义属性类型 | 是 | 是 |
| 检查器:混合值(多重编辑)支持 | 是 | 是 |
| 数组和列表视图控件 | 是 | 是 |
| 数据绑定:序列化属性 | 是 | 是 |

相关推荐
Cx330❀5 小时前
Qt 多线程深度解析:从底层原理到 UI 线程与同步实战
开发语言·qt·ui·搜索引擎·性能优化·图形渲染
传奇开心果编程5 小时前
【声明式UI实用开发技术学与练】第5课 表单处理:受控与非受控
ui·移动开发·开发范式·编程框架·声明式ui
传奇开心果编程7 小时前
【声明式UI开发实用技术学与练】第9课 派生状态与计算
ui·移动开发·ux·编程框架·声明式ui
ZARD9969 小时前
Codex 连接 Figma:让 AI 读取 Figma UI 设计稿数据
ui·figma·codex
事圆则缓10 小时前
Android 一次性事件怎么设计:Channel、SharedFlow 还是 UI State?
android·ui
我命由我1234510 小时前
Photoshop - Photoshop 使用魔棒工具选择单独的区域
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
特立独行的猫a10 小时前
用仓颉语言给娃写了个打字练习游戏:cj-tauri 项目实战
游戏·ui·框架·tauri·仓颉·cangjie·cj-tauri
传奇开心果编程11 小时前
【声明式UI开发实用技术学与练】第8课 状态提升与下放
学习·flutter·react native·ui·swiftui·composer
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
Elastic 中国社区官方博客1 天前
使用 Lucene 搜索你的 Bean — 索引
java·大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene