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

相关推荐
画月的亮2 小时前
element-ui 使用过程中遇到的一些问题及解决方法
javascript·vue.js·ui
Jackson@ML11 小时前
React入门 – 1. 学习React的预备知识
javascript·react.js·ui
浅陌sss12 小时前
Unity中可靠的UDP实现
unity
leeindex13 小时前
ES 渗透查询 (Percolate query)
大数据·elasticsearch·搜索引擎·全文检索·中文分词·渗透·lucene
laimaxgg17 小时前
Qt常用控件之按钮QPushButton
开发语言·c++·qt·ui·qt5
奔跑的犀牛先生18 小时前
unity学习46:反向动力学IK
unity
幻世界20 小时前
【工具插件类教学】实现运行时2D物体交互的利器Runtime2DTransformInteractor
unity·交互·运行时2d物体交互
小王不会写code21 小时前
Element UI常用组件
javascript·vue.js·ui
招风的黑耳1 天前
数据大屏炫酷UI组件库:B端科技风格PSD资源集
科技·ui
音视频牛哥2 天前
Unity实现高性能多实例RTSP|RTMP播放器技术实践
unity·游戏引擎·音视频·实时音视频·大牛直播sdk·rtsp播放器·rtsp player