Unity UGUI系统到底是怎么工作的?

Unity 开发中,UGUI 几乎是使用频率最高的系统之一。

Button、Image、Text、Scroll View、Slider、Toggle……这些我们每天都在使用的 UI 组件,看起来只是一些简单的 GameObject,但实际上从一个 UI 元素被创建出来,到最终出现在屏幕上,中间经历了布局计算、几何数据生成、Canvas 重建、Batch 合批、Draw Call 提交等一系列过程。

尤其是在大型项目中,很多看似奇怪的 UI 性能问题,例如:

为什么修改一个 Text 会导致 UI 卡顿?

为什么 Layout Group 嵌套过多会影响性能?

为什么 Canvas 拆分之后性能反而提升?

为什么 Draw Call 不高,UI 依然很卡?

为什么 Scroll View 中几百个 Item 会产生明显的性能问题?

这些问题,本质上都和 UGUI 的工作机制有关。

所以这篇文章不讨论“Button 怎么用”这种基础内容,而是从底层运行流程出发,看看 UGUI 到底是怎么工作的。

Image

UGUI整体架构

先建立一个整体认识。

UGUI 并不是一个单独的模块,而是多个系统组合起来的一套 UI 框架。

可以把它简单理解成下面这条链路:


        
UGUI源码分析:系统总结UGUI的全部内容 序言 嗨,我是Vin129,一名Unity客户端游戏开发者。UGUI应该算Unity客户端开发者们经常接触的东西了,所以该系列文章主旨在于加深对UGUI的了解,深入理解其组件实现原理,以便在日常使用中更加得心应手。其次,多读读源码也是一种成长:) 本系列文章到此已经完结啦!历时一个半月的时间,花费了30+个小时,Markdown记录了17000+内容(有许多代码),这仅仅是自己使用的部分。发布文章,在润色整理并能很好的呈现出来重要的东西,反复推敲,我觉得这上面可能花费的时间要更多。不过分享文章这也是我的初 阅读详情

相关推荐

Unity中UGUI事件系统(一)

实现接口IPointerClickHandler(鼠标点击)、IPointerEnterHandler(鼠标进入)、IPointerExitHandler(鼠标移出)、IPointerDownHandler(鼠标按下)、IPointerUpHandler(鼠标松开)、UIEventClick脚本挂载到需要点击的UI上。1. 添加UIEventSelect脚本,该脚本实现了ISelectHandler(选定),IUpdateSelectedHandler(选中),IDeselectHandler(未选中)。

Umbella的博客 2260

<Unity UGUI> 在Unity5 的UGUI系统上实现图片的遮罩

UGUI是Unity官方在4.6 及其后版本中推出的GUI系统, 我们项目中采用的就是这种新的GUI系统。 Unity的GUI系统出现过相当长时间的一段官方空白期, 导致现在大部分游戏公司或者开发团队采用的都是第三方GUI插件,如NGUI等。这种现象的结果是, 虽

Lankton 2万+

Unity UI开发转型:从UGUI到FGUI的性能优化与工作流重构实战

在Unity游戏开发中,UI系统是连接玩家与游戏世界的核心交互层,其性能与开发效率直接影响项目质量。UGUI作为Unity原生UI解决方案,虽然集成度高,但在复杂界面下常面临Canvas重建带来的性能瓶颈,且资源管理与团队协作流程存在优化空间。为解决这些问题,开发者常转向更高效的第三方UI框架,通过分离式设计实现渲染优化与工作流革新。FGUI作为其中代表,采用编辑器与运行时分离的架构,将UI设计转化为数据包与图集,运行时通过高效绘图指令渲染,显著降低Draw Call与CPU开销。这种模式不仅提升了移动端复

weixin_30786657的博客 430

Unity基础-UGUI

##Canvas 渲染顺序 遵循刷油漆规则(画家算法) 依次由Render CameraDepth值、Sorting Layer先后顺序、Order in Layer值决定 canvas有三种渲染方式 1.screen space-overlay :理解为在屏幕上贴一层膜,在一切物体之上 2.screen space-camera:附着在camera上 3.world space:相当于一...

TxNet 909

Unity UGUI流光特效Shader源码深入解析

Unity UGUI是Unity游戏引擎中用于创建和管理用户界面的一套现代化工具。它通过直观的界面编辑器、强大的脚本API以及灵活的布局系统,使开发者能够以较少的工作量创建复杂的用户界面。光照模型是Shader编程中用于模拟光线与材质交互的基础。最常见的光照模型之一是冯氏光照模型(Phong Lighting),它基于局部光照的概念,通过模拟环境光照(Ambient)、漫反射(Diffuse)和镜面反射(Specular)来计算最终的颜色。

weixin_42513870的博客 1438

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1521

手把手教你用STM32单片机DIY一个简易PLC(附完整电路图与PCB文件)

本文详细介绍了如何利用STM32单片机DIY一个简易PLC控制器,涵盖硬件设计、电路图解析、PCB布局优化及固件框架实现。通过完整的电路图和PCB文件,帮助读者从元器件选型到工业级优化,逐步构建可靠的PLC系统,特别适合工业自动化爱好者和学习者实践。

weixin_42527160的博客 569

CCS环境下ADC采样波形的实时可视化调试技巧

本文详细介绍了在CCS环境下实现ADC采样波形实时可视化的调试技巧。通过数组缓存优化、多通道同步显示和波形测量工具的高级用法,帮助开发者高效调试嵌入式系统中的ADC采样问题,提升信号分析的准确性和效率。

weixin_33712987的博客 419

关于Nuttx操作系统

NuttX是一个成熟的实时操作系统

qq_28576837的博客 4089

【scratch音乐课】天空之城:音符与节拍、消息与链表

scratch是一个非常小巧的青少年编程工具,自带程序编写语句,积木式语句非常直观、易用,可创作数学、科学、音乐、绘画等方面作品。本文用scratch“演奏”一首大家非常熟悉的《天空之城》,并向大家介绍一些基本乐理知识,以及scratch中消息、链表的使用。

★·°立芯;︶︵︶ 1万+

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践

本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 269

Taro React组件使用(5) —— RuiPasswordInput 密码输入框显示隐藏和清空

初始化时,需要将传入的 value 赋值给当前组件的 value, 不能直接修改 props 的 value;在组件内输出组件内的变量时,最好先判断输出函数是否定义,再输出,否则很容易引起报错。

止于至善 891

【自适应调制】自适应调制解调通信链路误码率matlab仿真与分析

BPSK中的B是“Binary”的意思,也就是有两个变化状态,比如说相位上的“+90°(代表1)、-90°(代表0)”,一个状态代表的就是一个比特。QPSK的“Q”是“Quadrature”的意思,有四个变化状态,如相位上的“+45°(代表00)、-45°(代表11)、+135°(代表10)、-135°(代表01)”,那么一个状态就代表两个比特的信息,如图2所示。同理8PSK的一个状态代表三个比特。但是功率资源并不是无限的,基站总的发射功率是一定的,为了充分利用所有的功率,采用的就是AMC技术。

FPGA/MATLAB学习教程/源码/项目合作开发 1831

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: 【免费分享】Unity 2D攻击与斩击特效 2D VFX slashes pack 适合横版动作、平台跳跃、回合制战斗以及 RPG 等类型项目
下一篇: Unity Canvas到底是什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值