Unity UI 完全解决方案

Unity UI 完全解决方案

在我学习开发 unity 游戏尝试进行 UI 的构建的过程中,尝试寻找当前 Unity 最为推荐的 UI 构建方式,或者说最优的框架方案。

在中文网里寻找了半天,总感觉很多文章和教程给了方案,但又说不清楚为啥用这个方案,或者给出让人信服的证据。

所以在这里还是老生常谈的一句话:看官网

中文文档大概都是过了好几手的东西,最终信息难免失真或者有偏差,本篇最为二手解释,仍然希望你可以直接阅读官网

附上链接:UIToolkits 官方文档

User interface (UI)

在官方文档中,给出了三种 UI 构建的解决方案

  • UI Toolkit
  • The Unity UI package (uGUI)
  • IMGUI

同时也提到了这样一句话

Unity intends for UI Toolkit to become the recommended UI system for new UI development projects, but it is still missing some features found in Unity UI (uGUI) and IMGUI.

也就是说官方想要主推 UI Toolkit

当我看到这句话的时候我就已经决定使用 UI Toolkit,官方都主推了,无脑用就行了。

但是,这个但是很重要 UI Toolkit 相较于另外两个仍然缺少部分功能,也就是说如果你想构建更丰富的 UI 交互 UI Toolkit 可能无法很好的实现,具体来详细看下对比。

好吧,其实总结下来,如果你新手刚入门,无脑 UI Toolkit 就行了,但是如果你有 UGUI 的基础,可以仍然使用 UGUI ,IMGUI 并不推荐

UI 系统在 Unity 的比较

在官方文档 Comparison of UI systems in Unity 一文中提到

UI Toolkit 正在积极开发并经常发布新功能。uGUI 和 IMGUI 是已建立并经过生产验证的 UI 系统,不经常更新。

如果您需要 UI Toolkit 中尚未提供的功能,或者需要支持或重用旧版 UI 内容,uGUI 和 IMGUI 可能是更好的选择。

UI Toolkit 是在新的 UI 开发项目中比较推荐的 UI 系统,在当前版本 (2023.3)当中 UI Toolkit 不具备 UGUI 和 IMGUI 支持的某些功能

UGUI 和 IMGUI 某些情况更为合适,并且支持遗留的项目。

关于UI Toolkit、Unity UI(uGUI)和Immediate Mode GUI(IMGUI)的详细比较

运行时(Runtime)方面:

  • Unity UI(uGUI) 在运行时被推荐用于处理UI在3D世界中的定位和照明、自定义着色器和材质的视觉效果、以及从MonoBehaviours中轻松引用。
  • UI Toolkit 则是在创建适应多种屏幕分辨率的屏幕叠加UI时的替代选择。如果你需要制作大量用户界面工作、需要艺术家和设计师熟悉的创作工作流程、或者寻求无纹理UI渲染能力,考虑使用UI Toolkit。

用例(Use Cases):

  • 在处理多分辨率项目中的菜单和HUD时,UI Toolkit 被推荐使用。
  • 对于在世界空间中的UI和VR,使用 Unity UI
  • 如果需要定制的着色器和材质,也使用 Unity UI

详细的运行时特性:

  • 在WYSIWYG(所见即所得)创作方面,UI ToolkitUnity UI 都支持。
  • UI Toolkit 支持嵌套可重用组件、全局样式管理、布局和样式调试器等特性,而有一些 Unity UI 不支持。
  • 对于一些特殊需求,比如渲染管线支持、屏幕空间(2D)和世界空间(3D)渲染,以及自定义材质和着色器,你需要根据具体情况选择使用 UI Toolkit 还是 Unity UI

编辑器方面(Editor):

  • UI Toolkit 在创建复杂编辑器工具、属性抽屉(Property drawers)以及与设计师协作时被推荐使用。它具有更好的可重用性、解耦性,以及用于创作UI的视觉工具。
  • IMGUI 是一个替代方案,适用于需要无限制访问编辑器可扩展功能、快速在屏幕上渲染UI的情况。

详细的编辑器特性:

  • 对于WYSIWYG创作、嵌套可重用组件、全局样式管理、布局和样式调试器等特性,UI Toolkit 在编辑器方面都支持。
  • IMGUI 则提供一种轻量级API,可以快速在屏幕上渲染UI,但在某些方面可能不如 UI Toolkit 那么强大和可扩展。

在官方文档中对于 IMGUI 并不推荐使用,它是一种传统的 GUI 系统,所以我这里不推荐 IMGUI ,仅对 UI Toolkit 还是 UGUI 的使用取舍上进行讨论。

Unity UI (uGUI)

优势:

  1. 成熟稳定: uGUI是Unity的传统UI系统,经过多年的发展,被广泛使用,成熟而稳定。
  2. 广泛支持和文档: uGUI有强大的社区支持和文档资源,易于找到解决问题的方法。
  3. 3D界面和VR支持: 对于在3D空间中定位UI以及在VR项目中的应用,uGUI相对更直接。
  4. 易上手: 对于新手来说,uGUI可能更容易上手,特别是对于已经熟悉Unity的开发者。
  5. 已有项目和经验: 如果你正在维护或扩展一个使用uGUI的项目,继续使用它可能更为合适,减少迁移的成本和风险。

劣势:

  1. 布局和样式限制: 在处理复杂布局和样式时,uGUI可能相对受限,可能需要更多的工作来实现一些高级效果。
  2. 可维护性: 在大型项目中,uGUI的可维护性可能相对较差,尤其是当UI结构变得复杂时。

UI Toolkit

优势:

  1. 灵活性和可扩展性: UI Toolkit提供了更灵活和可扩展的UI系统,支持复杂的布局和样式,适用于创建高度定制化的用户界面。
  2. WYSIWYG创作: 提供所见即所得的创作方式,使得设计和调整界面更为直观。
  3. 互动性和动画: UI Toolkit在互动性和动画方面提供更先进的工具,能够轻松实现更复杂的UI交互和动画效果。
  4. 编辑器工具: 更适用于创建复杂的编辑器工具,支持更高级的开发需求。

劣势:

  1. 学习曲线: 对于一些开发者来说,UI Toolkit的学习曲线可能相对较陡,特别是对于初学者或已经习惯uGUI的开发者。
  2. 相对新: 相对于uGUI,UI Toolkit在社区和生态系统方面可能相对较新,可能不如uGUI那么成熟。

选择建议:

  • 如果项目较小,对UI的要求相对简单,或者你已经熟悉uGUI,并且项目已经在使用uGUI,继续使用uGUI可能是个不错的选择。
  • 如果你需要高度定制化、互动性强的用户界面,或者是在开发复杂的编辑器工具,UI Toolkit可能更适合你。
  • 在做选择之前,最好先考察项目需求、团队技术栈和个人经验,也可以进行一些小规模的试验,看看哪个更符合你的项目和团队的需要。

整体上我是更倾向于使用更新的 UI Toolkit 的,但是为了避免选择时导致后续开发阻塞,搞清楚 UGUI 好于 UI Toolkit 哪些方面也很重要

总体而言,UI ToolkitUnity UI (uGUI) 都是功能强大的UI系统,可以满足大多数项目的需求。然而,由于两者在实现上的不同,某些效果在一个系统中可能更容易实现,而在另一个系统中可能需要更多的工作。以下是一些可能在 uGUI 中相对容易实现但在 UI Toolkit 中可能需要更多努力的效果:

  1. 特殊渲染需求: 如果你的项目需要一些特殊的渲染效果,可能需要自定义着色器和材质,uGUI 由于更直接的着色器支持,可能在这方面更灵活。

  2. 旧项目的迁移: 如果你正在维护一个使用 uGUI 的旧项目,而不想或不需要进行大规模的迁移工作,继续使用 uGUI 可能是更直接的选择。

  3. 某些特定的3D界面需求: 在处理一些复杂的3D界面需求时,例如将UI元素与3D对象直接关联或在3D场景中进行布局,uGUI 可能更直接。

  4. 依赖于广泛社区支持的特定插件: 如果你使用了一些依赖于 uGUI 的第三方插件或工具,这些插件可能在 UI Toolkit 中没有相应的支持。

需要注意的是,这些差异并不是绝对的,而且 UI Toolkit 在不断发展,未来的版本可能会支持更多的特性和效果。在选择UI系统时,最好根据项目的具体需求、团队的技能水平以及个人的开发偏好来权衡。如果在两者之间存在疑虑,也可以考虑进行一些小规模的试验,看哪个更适合你的项目。

相关推荐
MediaTea4 小时前
七次课掌握 Photoshop:选区与抠图
ui·photoshop
charon87786 小时前
UE ARPG | 虚幻引擎战斗系统
游戏引擎
小春熙子7 小时前
Unity图形学之Shader结构
unity·游戏引擎·技术美术
不秃头的UI设计师8 小时前
UI界面设计入门:打造卓越用户体验
ui·ux·ui设计
未来的嗒嘀嗒9 小时前
Axure是什么软件?全方位解读助力设计入门
ui·photoshop
Sitarrrr10 小时前
【Unity】ScriptableObject的应用和3D物体跟随鼠标移动:鼠标放置物体在场景中
3d·unity
极梦网络无忧10 小时前
Unity中IK动画与布偶死亡动画切换的实现
unity·游戏引擎·lucene
wrx繁星点点10 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
逐·風18 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
SoraLuna19 小时前
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
macos·ui·harmonyos