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系统时,最好根据项目的具体需求、团队的技能水平以及个人的开发偏好来权衡。如果在两者之间存在疑虑,也可以考虑进行一些小规模的试验,看哪个更适合你的项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch文本分类(一):文本预处理

pytorch文本分类(一):文本预处理 本文为自己在鲸训练营答题总结,作业练习都在和鲸社区数据分析协作平台 ModelWhale 上。 🚩学习任务原链接在这里 相关数据链接:https://pan.baidu.com/s/1iwE3LdRv3uAkGGI…

OpenCV遍历图像像素

引言: 为了构建计算机视觉应用程序,需要学会访问图像内容,有时也要修改或创建图像,如何操作图像的像素,就需要遍历一幅图像并处理每一个像素。现在我们就来介绍OpenCV三种图像像素的遍历方法。 一、 用cv::Mat类的at方…

Redis为什么是单线程的?Redis性能为什么很快?

Redis为什么是单线程的?Redis性能为什么很快? 一、Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快(纯内存)。 2.redis是单线程的,省去了很多上下文切换线程的时间(避免线…

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

需求工程>系统建议方案

根据项目规模的大小,系统方案既可以单独形成文档(系统建议方案报告、系统方案说明书),也可以合并到可行性研究报告中。如果单独形成文档,其内容和格式与可行性研究报告也是类似的。作为一个正式文档,系统建…

Linux安装jdk

目录 一、卸载 1.查看版本 2.检查jdk自带安装包 3.卸载jdk 4.如果有就卸载,卸载的包名通过(rpm -qa | grep java)获取,包名要全部输入 二、安装 1.查看云端目前支持安装的jdk版本,两种查询方式 2.选择想要安装的…

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux)A-2&#…

Flutter笔记:桌面端应用多窗口管理方案

Flutter笔记 桌面端应用多窗口管理方案 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134468587 【简介…

Vue.js 页面加载时触发函数

使用 Vue 的生命周期钩子函数&#xff1a; 在 Vue 组件中&#xff0c;可以使用生命周期钩子函数来执行特定的代码。其中&#xff0c;mounted 钩子函数可以在组件被挂载到 DOM 后触发。 <template><div><!-- 页面内容 --></div> </template>expo…

Windows11怎样投屏到电视上?

电视屏幕通常比电脑显示器更大&#xff0c;能够提供更逼真的图像和更震撼的音效&#xff0c;因此不少人也喜欢将电脑屏幕投屏到电视上&#xff0c;缓解一下低头看电脑屏幕的烦恼。 Windows11如何将屏幕投射到安卓电视&#xff1f; 你需要在电脑和电视分贝安装AirDroid Cast的电…

计算Qt中的QAudioOutput缓冲区未播放的音频字节数对应时长

计算 QAudioOutput 缓冲区中实时播放的数据的时间长度&#xff0c;可以使用 QAudioOutput 提供的方法来确定缓冲区中还未播放的字节数&#xff0c;然后根据当前的音频格式将这些字节转换成时间长度。 这里是如何计算的步骤&#xff1a; 使用 QAudioOutput::bufferSize() 方法…

【MySQL】数据类型

数据类型 前言正式开始数值类型整数类型bit类型浮点数类型floatdecimal 字符串类型charvarcharchar和varchar比较 日期和时间类型enum和setenum和set类型的查找 前言 我在前一篇讲表的操作的时候碰到了一些数据类型&#xff0c;但是没有正式讲这些类型&#xff0c;本篇就重点讲…

WPF中有哪些布局方式和对齐方法

在WPF (Windows Presentation Foundation) 中&#xff0c;你可以使用多种方式来进行元素的对齐&#xff0c;这主要取决于你使用的布局容器类型。以下是一些最常用的对齐方式&#xff1a; HorizontalAlignment 和 VerticalAlignment 在大多数WPF元素上&#xff0c;你可以使用 Ho…

管理分布式计算第一个谬误(网络可靠)的指南

分布式计算是一个复杂的领域&#xff0c;面临着众多挑战&#xff0c;了解与之相关的谬误对于构建健壮且可靠的分布式系统至关重要。以下是分布式计算的八个谬误及其意义&#xff1a; 1. 网络可靠&#xff1a;假设网络连接始终可用且可靠&#xff0c;当网络中断发生时&#xff…

SpringMVC log4j1升级log4j2

整个升级过程耗时5个小时&#xff0c;中间耗时最长的是找合适的包和升级后日志无法打印以及无法控制日志输出位置&#xff0c;完成后感觉其实很简单&#xff0c;如果一开始就能看到我现在写的笔记&#xff0c;可能几分钟就搞定了。 第一步&#xff1a;首先上log4j2所需要的包 …

根据店铺ID/店铺链接/店铺昵称获取京东店铺所有商品数据接口|京东店铺所有商品数据接口|京东API接口

要获取京东店铺的所有商品数据&#xff0c;您需要使用京东开放平台提供的API接口。以下是一些可能有用的API接口&#xff1a; 商品SKU列表接口&#xff1a;该接口可以获取指定店铺下的所有商品SKU列表&#xff0c;包括商品ID、名称、价格等信息。您可以使用该接口来获取店铺中…

一文看分布式锁

为什么会存在分布式锁&#xff1f; 经典场景-扣库存&#xff0c;多人去同时购买一件商品&#xff0c;首先会查询判断是否有剩余&#xff0c;如果有进行购买并扣减库存&#xff0c;没有提示库存不足。假如现在仅存有一件商品&#xff0c;3人同时购买&#xff0c;三个线程同时执…

Go 语言数组基础教程 - 数组的声明、初始化和使用方法

数组用于在单个变量中存储相同类型的多个值&#xff0c;而不是为每个值声明单独的变量。 声明数组 在Go中&#xff0c;有两种声明数组的方式&#xff1a; 使用var关键字&#xff1a; 语法 var array_name [length]datatype{values} // 这里定义了长度 或者 var array_n…

vivado产生报告阅读分析6-时序报告2

1、复查时序路径详情 单击“ OK ”运行报告命令后 &#xff0c; 将打开一个新窗口。这样您即可复查其中内容。在其中可查看执行选定的每种类型 (min/max/min_max ) 的分析之后所报告的 N 条最差路径。 下图显示的“Report Timing ” &#xff08; 时序报告 &#xff09; 窗口…