当前位置: 首页 > news >正文

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

相关文章:

Unity UI 完全解决方案

Unity UI 完全解决方案 在我学习开发 unity 游戏尝试进行 UI 的构建的过程中,尝试寻找当前 Unity 最为推荐的 UI 构建方式,或者说最优的框架方案。 在中文网里寻找了半天,总感觉很多文章和教程给了方案,但又说不清楚为啥用这个方…...

为什么打开idea时,没有启动页面,如何解决?

更新idea2021.2后,当双击idea打开时,发现没有启动界面,直接进入IDEA界面,中间等待时间,让人误以为没有打开idea成功,使得多次点击idea图标。 解决方案就是 在idea界面菜单栏中找到帮助(Help)&a…...

golang - 嵌入静态文件打包

go-bindata - embed结合嵌入静态文件打包可执行二进制文件 ## embed 嵌入静态文件到可执行二进制文件 # 安装go-bindata go get -u github.com/jteeuwen/go-bindata/... # 打包静态文件 go-bindata web/... 执行次命令之后会在项目目录下生成bindata.go文件,示例命令中模板文…...

SQL题

[极客大挑战 2019]EasySQL 进行简单的尝试,就知道是单引号的字符型注入 万能密码进行一个简单的尝试 结果就出来了 还是要了解一下原理 输入的是1,形成的sql语句是错误的SELECT*FROM table_name WHERE username1and password123; 第一个单引号和第二个…...

GUN介绍

介绍 GNU(GNU’s Not Unix)是一个自由操作系统项目,名字是一个递归的 GNU’s Not Unix 缩写,其目标是创建一个类Unix的操作系统。 该项目由Richard Stallman于1983年发起,并由自由软件基金会(Free Softwa…...

《Effective C++》条款15

在资源管理类中提供对原始资源的访问 class A {... }; int day(const A* ptr) {... } int main() {shared_ptr<A> ptr(new A);cout << day(ptr) << endl; } 这样写是错误的。因为day函数要求的参数是指针&#xff0c;而你传的实际上是一个对象。 如何解决呢&…...

CTFd-Web题目动态flag

CTFd-Web题目动态flag 1. dockerhub注册2. dockerfile编写3. 上传到docker仓库4. 靶场配置5. 动态flag实现 1. dockerhub注册 想要把我们的web题目容器上传到docker仓库中&#xff0c;我们需要dockerhub官网注册一个账号&#xff0c;网址如下 https://hub.docker.com/2. dock…...

系列九、对象的生命周期和GC

一、堆细分 Java堆从GC的角度还可以细分为&#xff1a;新生代&#xff08;eden【伊甸园区】、from【幸存者0区】、to【幸存者1区】&#xff09;和老年代。 二、MinorGC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区&#xff0c;年龄1 首先&#xff0c;当eden区…...

spark 窗口滑动用于在不同的数据块之间执行操作

在 Scala 中进行分布式执行&#xff0c;例如使用 Apache Spark&#xff0c;可以通过设置窗口滑动来实现不同 RDD 之间的关联处理。窗口滑动是一种窗口操作&#xff0c;用于在不同的数据块之间执行操作。 以下是一个简单的示例&#xff0c;演示如何在 Spark 中使用窗口滑动&…...

【数据结构】栈与队列的实现

栈与队列是数据结构中重要的结构&#xff0c; 可以用于解决一些题目 模拟实现时可以增加对于这些结构的理解&#xff0c;也可以巩固我们的语言水平&#xff0c;解决某些题目也会有很好的效果 话不多说 目录 栈的实现结构体的定义&#xff1a;初始化栈:压栈&#xff1a;出栈&am…...

HCL设备启动失败——已经解决

摸索了一个多小时&#xff0c;终于搞定了&#xff0c;首先HCL这款软件是需要安装Oracle VM Visual Box的&#xff0c;小伙伴们安装的时候记得点击安装Visual Box&#xff1b; 安装完后显示设备不能启动&#xff0c;然后我根据这个 HCL模拟器中Server设备启动失败的解决办法_hc…...

RabbitMQ的幂等性、优先级队列和惰性队列

文章目录 一、幂等性1、概念2、消息重复消费3、解决思路4、消费端的幂等性保障5、唯一 ID指纹码机制6、Redis 原子性 二、优先级队列1、使用场景2、如何添加3、实战 三、惰性队列1、使用场景2、两种模式3、内存开销对比 总结 一、幂等性 1、概念 用户对于同一操作发起的一次请…...

Uniapp-小程序自定义导航栏

一、项目背景 制作小程序页面时候发现原生导航栏有一定的高度是没有背景渲染的会出现这种情况 但是我们需要的是 二、原因 小程序的原生导航栏存在。一般可以使用 纯色填充顶部栏 可以直接使用navigationBarBackgroundColor完成 在style中添加 "navigationBarBackgrou…...

云课五分钟-08安装Opera成功-仓库中查找对应版本

前篇&#xff1a; 云课五分钟-07安装Opera失败-版本不匹配 视频&#xff1a; 云课五分钟-08安装Opera成功-仓库中查找对应版本 文本&#xff1a; 最佳的途径就是使用系统内置的FireFox。 这么折腾的主要是为了演示安装一个第三方程序可能遇到的问题&#xff0c;并给出一些思…...

设计师的好帮手!在线PS网页版工具让创意无限发挥!

PS已经成为设计师必备的基本技能软件。PS版本的不断更新升级使PS功能更加强大。PS可以完成从简单的艺术家到复杂的设计和插画。但与此同时&#xff0c;PS也有设计师经常批评的痛点:大文件运行时内存卡住&#xff0c;位图放大后清晰度低&#xff0c;无穷无尽的快捷键&#xff0c…...

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,Kotlin

Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边&#xff0c;Kotlin import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.…...

【docker启动的Jenkins时,遇到时区问题处理】

1、查看容器中的时区 [rootlocalhost jenkins]# docker exec -it jenkins cat /etc/timezone Etc/UTC而本地使用的是Asia/shanghai [rootlocalhost jenkins]# timedatectl | grep Time zoneTime zone: n/a (CST, 0800)###查看 [rootlocalhost jenkins]# cd /usr/share/zoneinf…...

MySQL8.0学习笔记

1. CMD命令 1.1 数据库启动与停止 (1) 启动数据库&#xff1a;net start mysql80 (2) 停止数据库&#xff1a;net stop mysql80 1.2 数据库连接与退出 (1) 连接数据库&#xff1a;mysql [-hlocalhost -P3306] -uroot -p[123456] // 本地数据库可省略-h -P (2) 退出数据库…...

初始MySQL(七)(MySQL表类型和存储引擎,MySQL视图,MySQL用户管理)

目录 MySQL表类型和存储引擎 MyISAM MEMORY MySQL视图 我们先说说视图的是啥? 视图的一些使用细节 MySQL用户管理 原因 常见操作 MySQL表类型和存储引擎 -- 查看所有的存储引擎 SHOW ENGINES 我们常见的表有MyISAM InnoDB MEMORY 1.MyISAM不支持事务,也不支持外…...

Redis 配置文件信息中文翻译版

前言 Redis 配置文件信息中文翻译版&#xff0c;方便大家阅读和理解对应参数信息及配置参数信息 # Redis configuration file example# Note on units: when memory size is needed, it is possible to specify # it in the usual form of 1k 5GB 4M and so forth: # 注意:当…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...