Unity面板究极优化

         首先对于大项目来说UI首选一定的UGUI,目前没有啥可选的余地。多一点都是对性能的负担,UGUI底层基于多线程技术,可以有效分担压力,对于一些不是那么重的面板几乎无感。

        无论其他面板只是在此基础上修改的,但每多一层,计算机难免就得多一道计算,因此目前最优解一定是UGUI。

        这两天频繁的被问面板优化,该做的都已经做过了但还是不行,达不到要求该怎么办呢?

UGUI性能问题一般分为四种:

  1. Canvas  batch-build过长,通常是drawcall问题
  2. Canvas  Over-dirty 次数过多,频繁销毁创建
  3. 生成UI网格顶点时间过长
  4. GPU片元着色器利用率过高

        UGUI的drawcall是由c++完成的,因此对于同一个canvas下的图片我们要尽可能采用合批,无论它是静态合批还是动态合批,以降低drawcall,提高效率

合批的过程:

根据UI面板的深度进行排序

检查UI面板图片的遮盖关系

检查材质对于相同材质进行合批

        以上这些是在unity里c++部分完成的,因此对于轻量级的面板,打开一般无感,能够很流畅的打开

通常UGUI打图集是一招遮百丑的技术方案,很好用,效率也非常高

        为了避免面板卡钝出现问题,优化好UI,因此在搭建面板之前一定要竖立好规矩:

1、动静分离。建立两个Canvas面板将会动态绘制,可能触发重构的面板与静态面板分离

2、将所有可能打断合批的面板移到最下层,做好面板互斥,避免无用UI面板重叠出现

3、不使用Layout组件,最好自己用代码做好管理

4、Canvas的RenderMode尽量使用Overlay模式

5、不使用Text组件,使用TMP(TextMeshPro)组件代替

6、尽可能关闭面板上无用的组件系统,(比如关闭Raycast Target,尽量仅在最下一层面板开启)

7、对于嵌套的Canvas,OverrideSorting属性会打断射线,可以降低层级遍历

8、对于UI对象查找尽量不使用Find来进行查找,做好标签进行查找

9、美术图片尽量不要带有透明部分,图片制式要能被2整除

10、至少要简单了解UGUI特性和字体问题

11、字体不要太小,否则可能会导致频繁重建

12、使用Font.RequestCharacterInTexture进行字体预加载,降低启动时间

13、对于不可见UI不要使用UI的透明度进行开关显示,因为它实际上依然在绘制

14、非全屏对话模式合理的使用OnDemandRendering接口,合理降频

15、优化UI Shader剪裁,根据需要合理剔除多余部分

16、对于背包商城部分合理使用对象池和动态图集,合理缓存

17、分帧加载背包商城

18、合理设计好面板的打开方式,对重型界面提前缓存

19、使用RectMask2D组件剪裁,剔除不必要部分渲染,使用规则的滑动列表

20、终极大招,找美术削图片质量,找策划削功能(没治只能这么干了)

21、适当重新设计面板的打开方式,减轻压力和负担

22、也可以根据UGUI源码自己改一套自己的UI管理模式框架

以上即是规矩,也是UGUI优化的要点

如果这些都做了,那可能还得排除考虑下其他部分设计是否合理,是不是因此影响了面板,出现了卡顿

非战斗,影响不到用户体验可以不做优化,一般帧数不少于20-30即可(用户感觉不到就行了)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图解架构 | SaaS、PaaS、IaaS/aPaaS平台是什么?aPaaS与PaaS有什么区别?

参考 图解架构 | SaaS、PaaS、IaaS:https://www.51cto.com/article/717315.html aPaaS平台是什么?aPaaS与PaaS有什么区别?:https://developer.aliyun.com/article/718714 aPaaS和PaaS的区别是什么? aPaaS和PaaS都可以完成软件的…

Redis 双写一致性实践及案例

面试问题: 你只要用缓存,就可能会涉及到redis缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?双写一致性,你先动缓存redis还是数据库mysql哪一个&…

Linux从安装到实战 常用命令 Bash常用功能 用户和组管理

1.0初识Linux 1.1虚拟机介绍 1.2VMware Workstation虚拟化软件 下载CentOS; 1.3远程链接Linux系统 &FinalShell 链接finalshell半天没连接进去 他说ip adress 看IP地址是在虚拟机上 win11主机是 终端输入: ifconfig VMware虚拟机的设置 & ssh连接_snge…

Word中如何断开表格中线段

Word中如何断开表格中线段_word表格断线怎么弄_仰望星空_LiDAR的博客-CSDN博客有时候为了美观,需要实现如下的效果,即第2条线段被断开成3段步骤如下:选中需要断开的格网,如下,再选择段落、针对下框标即可。_word表格断…

组件(lvs,keeplive,orm,mysql,分布式事务)

lvs LVS 已经集成到Linux内核系统中,ipvsadm 是 LVS 的命令行管理工具。 目前有三种 IP 负载均衡技术( VS/NAT 网络地址转换 、VS/TUN IP 隧道技术实现虚拟服务器 和 VS/DR 直接路由); 八种调度算法:轮询 …

IntelliJ IDEA 如何优雅的添加文档注释(附详细图解)

IntelliJ IDEA 如何优雅的添加文档注释(附详细图解) 📌提要✍✍类注释✍✍方法注释 📌提要 在开发过程中,最常用的注释有两种:类注释和方法注释,分别是为类和方法添加作者、日期、版本号、描述等…

ensp-GVRP服务

ensp-GVRP服务 日期:6-26 📎GVRP实验.zip📎GVRP服务.docx

【云原生|Docker系列第3篇】Docker镜像的入门实践

欢迎来到Docker入门系列的第三篇博客!在前两篇博客中,我们已经了解了什么是Docker以及如何安装和配置它。本篇博客将重点介绍Docker镜像的概念,以及它们之间的关系。我们还将学习如何拉取、创建、管理和分享Docker镜像,这是使用Do…

从8个新 NFT AMM,聊聊能如何为 NFT 提供流动性

DeFi 的出现,开启了数字金融民主化的革命。其中,通过 AMM 自由创建流动性池极大地增加了 ERC-20 Token 的流动性,并为一些长尾 Token 解锁了价值的发现,因而今天在链上可以看到各种丰富的交易、借贷和杠杆等活动。 而另一方面&am…

angular-mat-select 多选 实现按选择顺序排序

mat-select 正常情况下,多选后,已选项是按列表顺序进行排序,如果我想实现按照点击项目的顺序进行排序,我该如何做呢? [参考网址](Angular order of selected option in multiple mat-select - Stack Overflow) sortComparator是Angular Material中mat-select组件的一个属…

无涯教程-Lua - 垃圾回收

Lua使用自动内存管理,该管理使用基于Lua内置的某些算法的垃圾回收。 垃圾收集器暂停 垃圾收集器暂停用于控制垃圾收集器之前需要等待多长时间; Lua的自动内存管理再次调用它。值小于100意味着Lua将不等待下一个周期。同样,此值的较高值将导…

Golang之路---04 并发编程——信道/通道

信道/通道 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道,我把他叫做信道,也有人将…

.Net6 Web Core API --- Autofac -- AOP

目录 一、AOP 封装 二、类拦截 案例 三、接口拦截器 案例 AOP拦截器 可开启 类拦截器 和 接口拦截器 类拦截器 --- 只有方法标注 virtual 标识才会启动 接口拦截器 --- 所有实现接口的方法都会启动 一、AOP 封装 // 在 Program.cs 配置 builder.AddAOPExt();//自定义 A…

java使用openOffice将excel转换pdf时,将所有列显示在一页

1.接上文,格式转换的基础问题已解决,但还有些细节问题需要单独处理,如excel转换至pdf时,如何将所有列显示在一页的问题,此问题大家都有遇到,解决方案也比较多,我也尝试过重写某类,来…

从excel中提取嵌入式图片的解决方法

1 发现问题 我的excel中有浮动图片和嵌入式图片,但是openpyxl的_image对象只提取到了浮动图片,通过阅读其源码发现,这是因为openpyxl只解析了drawing文件导致的,所以确定需要自己解析 2 解决思路 1、解析出media资源 2、解析…

eclipse Java Editor Templates

​ Window - Preferences - Java - Editor - Templates ​ date ${currentDate:date(yyyy.MM.dd)}

W6100-EVB-PICO做DNS Client进行域名解析(四)

前言 在上一章节中我们用W6100-EVB-PICO通过dhcp获取ip地址(网关,子网掩码,dns服务器)等信息,给我们的开发板配置网络信息,成功的接入网络中,那么本章将教大家如何让我们的开发板进行DNS域名解…

使用 OpenCV 和 Python 卡通化图像-附源码

介绍 在本文中,我们将构建一个有趣的应用程序,它将卡通化提供给它的图像。为了构建这个卡通化器应用程序,我们将使用 python 和 OpenCV。这是机器学习令人兴奋的应用之一。在构建此应用程序时,我们还将了解如何使用 easygui、Tkinter 等库。在这里,您必须选择图像,然后应…

(亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

最近在进行一个Flask项目的过程中遇到了unresolved reference 包名的问题,在网上找了好久解决方案,并没有一个能让我一步到位解决问题的。 后来,我对该问题和网上的解决方案进行了分析,发现网上大多数都是针对项目同一目录下的py…

变压器参数测定中空载实验和短路实验的理解

确定变压器的参数是在《电机学》和《电力系统分析》中非常重要的一个环节,这里用自己习惯的方式讲一下怎样理解 首先要讲下变压器的额定参数,这个也是个常考的知识点 额定功率,即视在功率,电压电流,单位是VA或者kVA额…