北京建筑公司有哪些/seo基础教程
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 Toolkit 和 Unity 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)
优势:
- 成熟稳定: uGUI是Unity的传统UI系统,经过多年的发展,被广泛使用,成熟而稳定。
- 广泛支持和文档: uGUI有强大的社区支持和文档资源,易于找到解决问题的方法。
- 3D界面和VR支持: 对于在3D空间中定位UI以及在VR项目中的应用,uGUI相对更直接。
- 易上手: 对于新手来说,uGUI可能更容易上手,特别是对于已经熟悉Unity的开发者。
- 已有项目和经验: 如果你正在维护或扩展一个使用uGUI的项目,继续使用它可能更为合适,减少迁移的成本和风险。
劣势:
- 布局和样式限制: 在处理复杂布局和样式时,uGUI可能相对受限,可能需要更多的工作来实现一些高级效果。
- 可维护性: 在大型项目中,uGUI的可维护性可能相对较差,尤其是当UI结构变得复杂时。
UI Toolkit
优势:
- 灵活性和可扩展性: UI Toolkit提供了更灵活和可扩展的UI系统,支持复杂的布局和样式,适用于创建高度定制化的用户界面。
- WYSIWYG创作: 提供所见即所得的创作方式,使得设计和调整界面更为直观。
- 互动性和动画: UI Toolkit在互动性和动画方面提供更先进的工具,能够轻松实现更复杂的UI交互和动画效果。
- 编辑器工具: 更适用于创建复杂的编辑器工具,支持更高级的开发需求。
劣势:
- 学习曲线: 对于一些开发者来说,UI Toolkit的学习曲线可能相对较陡,特别是对于初学者或已经习惯uGUI的开发者。
- 相对新: 相对于uGUI,UI Toolkit在社区和生态系统方面可能相对较新,可能不如uGUI那么成熟。
选择建议:
- 如果项目较小,对UI的要求相对简单,或者你已经熟悉uGUI,并且项目已经在使用uGUI,继续使用uGUI可能是个不错的选择。
- 如果你需要高度定制化、互动性强的用户界面,或者是在开发复杂的编辑器工具,UI Toolkit可能更适合你。
- 在做选择之前,最好先考察项目需求、团队技术栈和个人经验,也可以进行一些小规模的试验,看看哪个更符合你的项目和团队的需要。
整体上我是更倾向于使用更新的 UI Toolkit 的,但是为了避免选择时导致后续开发阻塞,搞清楚 UGUI 好于 UI Toolkit 哪些方面也很重要
总体而言,UI Toolkit 和 Unity UI (uGUI) 都是功能强大的UI系统,可以满足大多数项目的需求。然而,由于两者在实现上的不同,某些效果在一个系统中可能更容易实现,而在另一个系统中可能需要更多的工作。以下是一些可能在 uGUI 中相对容易实现但在 UI Toolkit 中可能需要更多努力的效果:
-
特殊渲染需求: 如果你的项目需要一些特殊的渲染效果,可能需要自定义着色器和材质,uGUI 由于更直接的着色器支持,可能在这方面更灵活。
-
旧项目的迁移: 如果你正在维护一个使用 uGUI 的旧项目,而不想或不需要进行大规模的迁移工作,继续使用 uGUI 可能是更直接的选择。
-
某些特定的3D界面需求: 在处理一些复杂的3D界面需求时,例如将UI元素与3D对象直接关联或在3D场景中进行布局,uGUI 可能更直接。
-
依赖于广泛社区支持的特定插件: 如果你使用了一些依赖于 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函数要求的参数是指针,而你传的实际上是一个对象。 如何解决呢&…...

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

系列九、对象的生命周期和GC
一、堆细分 Java堆从GC的角度还可以细分为:新生代(eden【伊甸园区】、from【幸存者0区】、to【幸存者1区】)和老年代。 二、MinorGC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区,年龄1 首先,当eden区…...

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

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

HCL设备启动失败——已经解决
摸索了一个多小时,终于搞定了,首先HCL这款软件是需要安装Oracle VM Visual Box的,小伙伴们安装的时候记得点击安装Visual Box; 安装完后显示设备不能启动,然后我根据这个 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成功-仓库中查找对应版本
前篇: 云课五分钟-07安装Opera失败-版本不匹配 视频: 云课五分钟-08安装Opera成功-仓库中查找对应版本 文本: 最佳的途径就是使用系统内置的FireFox。 这么折腾的主要是为了演示安装一个第三方程序可能遇到的问题,并给出一些思…...

设计师的好帮手!在线PS网页版工具让创意无限发挥!
PS已经成为设计师必备的基本技能软件。PS版本的不断更新升级使PS功能更加强大。PS可以完成从简单的艺术家到复杂的设计和插画。但与此同时,PS也有设计师经常批评的痛点:大文件运行时内存卡住,位图放大后清晰度低,无穷无尽的快捷键,…...
Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,Kotlin
Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,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) 启动数据库:net start mysql80 (2) 停止数据库:net stop mysql80 1.2 数据库连接与退出 (1) 连接数据库: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 配置文件信息中文翻译版,方便大家阅读和理解对应参数信息及配置参数信息 # 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: # 注意:当…...

React项目首页中用canvas实现星空
文章目录 前言代码使用后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端系列文章 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家…...

flutter ios Exception : No Impeller Context is Available
在模拟器上运行 ios 项目的时候,图片显示不出来。真机可以显示 原因:ios默认启用 impeller(新渲染引擎),不知道为什么项目不能使用。 禁用掉即可, 原因以及解决都在下面的链接里面了 Impeller rendering …...

[PHP]写个简单的分页静态接口用宝塔部署到Nginx
使用get方式传入page和pageSize参数,接口根据参数进行分页处理。 1.创建一个 PHP 文件 例如 city.php,用于定义接口和返回 JSON 数据。 2.在 city.php 文件中编写接口 <?php// 设置响应内容为 JSON 格式 header(Content-Type: application/json);…...

表单提交是
首先,确保你已经安装了Vue 3、Element UI和axios(用于发送HTTP请求)。你可以使用以下命令进行安装: bash复制代码 npm install vuenext element-ui axios --save <template> <el-form :model"form" :rules&q…...

Qt的委托代理机制
委托是Qt中的一种机制,用于在Qt模型/视图架构中处理特定类型的数据。委托提供了一种方便的方法来定制特定类型的数据的显示和编辑。委托可以做以下事情: 编辑特定类型的数据: 通过创建编辑器来编辑特定类型的数据,例如日期,数值等。 渲染特定类型的数据: 通过定制单…...

OpenCV入门5——OpenCV的算术与位运算
文章目录 图像的加法运算图像的减法运算图像的乘除运算图像的融合OpenCV位运算-非操作OpenCV位操作-与运算OpenCV位操作-或与异或为图像添加水印 图像的加法运算 # -*- coding: utf-8 -*- import cv2 import numpy as npimg cv2.imread(E://pic//4.jpg)# 图的加法运算就是矩阵…...

好用的开源项目地址
Sword: SpringBlade前端UI项目,基于react 、ant design、dva、umi,用于快速构建系统中后台业务。 官网:https://bladex.cn Saber: SpringBlade前端UI项目,对现有的avue2.0、element-ui库进行二次封装。基于json驱动的模块配置&am…...

深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集
Softmax 回归 基本原理 回归和分类,是两种深度学习常用方法。回归是对连续的预测(比如我预测根据过去开奖列表下次双色球号),分类是预测离散的类别(手写语音识别,图片识别)。 现在我们已经对回…...

单稳态中间继电器\UEG/A-2H/220V 8A导轨安装 JOSEF约瑟
UEG系列中间继电器 UEG/A-2H2D中间继电器UEG/A-4H4D中间继电器UEG/A-2D中间继电器 UEG/A-2H中间继电器UEG/A-4H中间继电器UEG/A-4D中间继电器 UEG/A-6H中间继电器UEG/A-6D中间继电器UEG/A-8H中间继电器 UEG/A-10D中间继电器UEG/A-10H中间继电器UEG/A-2DPDT中间继电器 UEG/A-4DP…...

2311rust到20版本更新
Rust1.9 Rust1.9中最大的变化是稳定了包括停止恐慌启动的展开过程方法的std::panic模块: use std::panic; let result panic::catch_unwind(|| {println!("hello!"); }); assert!(result.is_ok()); let result panic::catch_unwind(|| {panic!("oh no!"…...