Q&A——UI输入(二)

Qt5 UI界面设计 新建Qt项目 拖控件,跟MFC相似直接拖拽即可 头文件与cpp文件 mainwindow.cpp mainwindow.h 构造函数与析构函数 .pro文件 加载Qt文件选择.pro文件 水平布局与垂直布局 将控件拖入到GroupBox,Scroll Area等盒子类控件时注意将控件进行布局,避免截面乱掉。 按住ctrl连续选择多个控件进行布局,下图效果就是scroll Area 界面比=比例调整 关联Slider与spinBox .. 阅读详情

UI输入

Q1:关于UI的Mask遮挡特效,能否提供一些解决思路呢?

目前由于UI与粒子系统是两个相对独立的模块,因此两者的Mask遮挡并没有简单直接的方法。我们建议从以下几种方式来考虑实现:

  1. 将粒子系统转为序列帧,通过纯UI的方式来实现;
  2. 通过RenderTexture,添加一个相机来实现方形的“裁剪”;
  3. 参考UI的内置Shader,编写一个受Stencil Buffer影响的Shader,同时通过给粒子系统以及UI的SortingLayer,OrderInLayer设置适当的值,从而实现Mask组件对粒子系统的遮罩。

UI输入

Q2:请问,Canvas里的东西移出了屏幕后,DrawCall没降低,那么它还会每帧去绘制吗?

DrawCall没降低,说明CPU依然将这部分的网格提交到了GPU。因此虽然UI元素已经不可见,但其CPU开销(包括切换渲染状态,提交VBO等)依然是在的,只是对GPU不会造成明显影响,因为最终并没有进行像素的渲染。

UI 输入

Q3: 多人同屏的时候,人物移动会使得头顶上的名字Mesh重组,从而导致较为严重的卡顿,请问一下是否有优化的办法?

A: 如果是用UGUI开发的,当头顶文字数量较多时,确实很容易引起性能问题,可以考虑从以下几点入手进行优化:

  1. 尽可能避免使用UI/Effect,特别是Outline,会使得文本的Mesh增加4倍,导致UI重建开销明显增大;

  2. 拆分Canvas,将屏幕中所有的头顶文字进行分组,放在不同的Canvas下,一方面可以降低更新的频率(如果分组中没有文字移动,该组就不会重建),另一方面可以减小重建时涉及到的Mesh大小(重建是以Canvas为单位进行的);

  3. 降低移动中的文字的更新频率,可以考虑在文字移动的距离超过一个阈值时才真正进行位移,从而可以从概率上降低Canvas更新的频率。


UI 输入

Q4:Unity自带的UI Shader处理颜色时,改 _Color属性不会触发顶点重建吗?

在UI的默认Shader中存在一个Tint Color的变量,正常情况下,该值为常数(1,1,1),且并不会被修改。如果是用脚本访问Image的Material,并修改其上的Tint Color属性时,对UI元素产生的网格信息并没有影响,因此就不会引起网格的Rebuild。但这样做因为修改了材质,所以会增加一个Draw Call。

UI 输入

Q5:UGUI的SrcollView Mask遮挡不住特效,这个有没有可行的解决方案?

UGUI的Scrollview Mask组件使用的是Stencil Buffer,需要严格确保渲染顺序的正确性,这对于粒子系统或是其他的模型较难控制,因此可以尝试通过其他的方式,如实现一个四边形Alpha 裁剪的Shader,将ScrollView的裁剪区域传入Shader,从而模拟一个特效被“遮罩”的效果。以下是宣雨松博客中提出的一种方式,可以作为参考:
http://www.xuanyusong.com/archives/3518

UI 输入

Q6:我发现当把UI挪到屏幕外时,Draw Call不会减少,只有设置Enabled去掉才能减少。UI是没有遮罩剔除这类功能吗? 那是否意味着ScrollRect只能自己做动态加载或者动态设置Enabled之类的优化了?

因为UGUI合并网格时是以Canvas为单位的,所以只把一部分UI元素移除屏幕并不能降低Draw Call,在Unity 5.2版本以前需要满足两点:

1. 使用Screen Space – Camera 的 Render Mode;
2. 需要将移出的UI元素放在独立的Canvas中,然后整体移出屏幕。

但在Unity 5.2版本之后,上述方法也已经失效。
因此我们建议,在移出后,通过将Canvas的Layer修改为相机Culling Mask中未选中的Layer来去除这部分多余的Draw Call,> 但这种方法同样需要将移出的UI元素放在独立的Canvas中。这种方法,相比Enabled的设置,可以减少一定的CPU开销。而对于ScrollRect,如果包含的UI元素较多,确实需要自己做动态加载和动态设置Enabled来进行优化。

UI 输入

Q7:UI展示动画时,使用Mask做和使用UI本身做 ,哪个效率会更高些?

一般来说建议尽可能少用Mask组件,该组件的使用对于Draw Call会有较大的影响,也可尝试用 Rect2D Mask来代替。而如果直接通过改变UI元素本身来做动画,当涉及的UI元素数量较大时,容易引起较高的网格重建开销。

UI 输入

Q8:关于UI开发,NGUI和UGUI究竟哪个性能更好呢?

从理论上来说,没有什么依据可以证明UGUI的性能一定比NGUI更优异。在UWA的测评报告中,对于NGUI来说,主要统计UIPanel.LateUpdate\UICamera.Update\UIRect.Update和UIRect.Start;对于UGUI来说,主要统计Canvas.BuildBatch和Canvas.SendwillRenderCanvases。相对于NGUI来看,UGUI确实在以下方面存在提升性能的可能:首先,在Unity 5.x 版本中,Unity逐渐将一部分UGUI的计算放到子线程去做,以此来缓解主线程的压力;其次,UGUI的UIMesh重建是通过底层C++代码实现的,而NGUI只能通过在上层不断创建vertex list来进行,这样在堆内存的管理上,UGUI确实要好很多,带来的隐性收益就是GC触发次数会少很多。但不能表示NGUI做出来的UI性能就一定比UGUI差,这个说法是不存在的。而且,在我们深度优化的过程中发现,NGUI同样可以达到很高的性能水准。所以,NGUI和UGUI都是很好的工具,只要把它们的特性掌握好,都可以做成性能很棒的UI界面。

UI 输入

Q9: 在UWA上周六的分享会中,我收获了不少性能优化的知识点,同时也有个疑惑,是关于“UI Mesh重构”这个话题。当时UWA说“把一个UI界面移出屏幕或者缩放是不会引起UI Mesh的重构”,但是我今天测试了一下,在UISprite上面挂了一个脚本,让它移出相机屏幕或者手动更改坐标时,发现都会出现CPU峰值,看上去确实是Mesh重建造成的。下面是我的测试截图:
请输入图片描述
上图是NGUI的第一个Scene,里面就在父节点只有一个UIPanel,这是我的测试环境。
请输入图片描述
请输入图片描述
上面两张图是我的测试截图,主要包括移动Transform和缩放Transform数据等,从Profiler中看都有Mesh重建。因此,我的测试结论是:无论是移出屏幕还是缩放为0,以及Deactivate操作都会引起Mesh的重构。希望UWA可以再测试一下,给一个结论。

改变UI Transform(移出屏幕、Scale为0等)是需要以Panel为单位的,即不要移出单个Widget,而是将不再使用的UI界面(Panel)整体移出屏幕外。该朋友提供的测试例子没有问题,因为只用了一个UIPanel,且移动的是其中的Widget,所以造成了这个UIPanel的整体耗时。因此,建议尝试把需要移除的UI元素放在一个独立的UIPanel中,然后直接移动UIPanel,这样就不会有CPU峰值出现了。

关于隐藏UI的详细描述,可以参考我们之前的技术推送:NGUI性能优化技巧。下文是部分片段:
请输入图片描述
其中,值得研发团队注意就是第二点中的“以UIPanel为单位”,因为Mesh的拼合是以UIPanel为单位的,整体移动UIPanel不会重建或更新Mesh,但移动其中一部分元素则依然会更新Mesh的。

UI 输入

Q10:对于UGUI文字花屏问题,有什么推荐的解决方法吗?
请输入图片描述

对于UGUI字体花屏的现象, 很有可能是字体的UV不准确导致。对此,我们推荐两篇博文,大家可以通过其中的具体做法来进行解决。

  1. 关于UGUI字体花屏和乱码:http://www.cnblogs.com/yaukey/p/unity_ugui_font_texture_uv_wrong.html

  2. UGUI研究院之Text字体花屏(二十二):http://www.xuanyusong.com/archives/4259


Lane、PHY和Preset Value Bit 每个Lane支持不同的传输速度和带宽,例如PCIe 3.0中,一个Lane的传输速度可以达到8 GT/s(Giga Transfers per second),也就是1 GB/s(GigaBytes per second)。Preset Value Bit(预置值位)是在PCIe 3.0的Lane上新引入的一种机制,用于优化信号传输质量。PCIe设备可以包含多个Lane,例如x1、x4、x8、x16等,表示该设备同时使用的Lane数目,比如x16表示该设备采用了16个Lane,具有更高的传输速度和带宽。 阅读详情

相关推荐

从SPI协议到文件系统:手把手教你用HAL库给W25Q16移植FATFS(附扇区管理优化方案)

本文详细介绍了如何在STM32平台上,通过HAL库的SPI接口为W25Q16 Flash芯片移植FATFS文件系统。文章从SPI通信基础讲起,深入解析了FATFS底层驱动(diskio.c)的移植要点,并重点探讨了针对W25Q16的4KB物理扇区特性进行扇区管理优化的两种方案,旨在帮助开发者构建稳定高效的文件存储方案。

happy2的博客 1044

Python文本用户界面curses

curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK) # 选中项。curses.init_pair(4, curses.COLOR_RED, curses.COLOR_BLACK) # 警告。curses.init_pair(6, curses.COLOR_BLACK, curses.COLOR_WHITE) # 反色。# ---------- 4. 创建子窗口(窗口和面板演示)----------

sillyoung的博客 25

Linux服务器上后台运行jupyter notebook/Lab

1 安装配置教程2 后台运行jupyter3 更改运行环境kernel4 SSH端口转发 1 安装配置教程 可以参考:https://www.cnblogs.com/thousfeet/p/10647102.html 2 后台运行jupyter screen -S jupyter # 新建一个名为jupyter的后台screen # 在base环境下,先 cd 到指定文件目录 jupyter notebook # or jupyter lab 3 更改运行环境kernel 需要手动为每个环境添加内.

strivequeen的博客 1837

PyQt用户界面设计day1

【代码】PyQt用户界面设计day1。

xjvvb的博客 236

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 306

抖音视频数据获取实战:从API调用到热门内容挖掘

通过抖音API获取视频数据,企业可快速构建数据驱动的运营体系。本文提供了从权限申请到商业落地的全流程指南,建议结合自身业务扩展功能。如有技术问题,欢迎​​评论​​区留言讨论!#抖音开发 #数据挖掘 #短视频运营 #API调用 #Python实战。

WBKJ_Noah_的博客 6407

在vs中无法用QtDesigner打开ui文件的解决方法

点击程序后边的三个点,去电脑查找designer.exe,我的位置为D:\Qt\Qt5.9.9\5.9.9\msvc2015_64\bin\designer.exe。这时,再重新去点击ui文件,则会自动调用designer.exe去打开了。名称可以自己起一个名字,点击确定即可。点击添加,弹出如下界面。

佳乐的博客 1114

【Unity程序技巧】Unity中单例模式管理器

单例模式(Singleton Pattern)是 最简单的设计模式之一

秩沅 1660

VS打开UI文件失败

可以参考我的去找一下:"C:\Qt\Qt5.14.2\Tools\QtCreator\bin\qtcreator.exe"选择一个UI文件,右键打开方式,要自己添加路径。然后选择自己的QT Creator路径。

m0_62407354的博客 553

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

A1983Z的博客 1225

手把手教你学simulink实例:基于Simulink的风力发电系统建模与仿真

风力发电作为一种清洁、可再生的能源形式,近年来得到了快速发展。风力发电系统的性能优化和控制策略设计对于提高发电效率、降低运行成本具有重要意义。本项目旨在使用MATLAB/Simulink平台,对风力发电系统进行建模与仿真,研究其动态特性,并验证控制策略的有效性。通过建立风力发电机、传动系统、发电机及电力电子变换器等子系统的模型,实现对风力发电系统的全面分析。

MHD0815的博客 559

QLineEdit学习记录-显示输入提示

1、QLineEdit根据输入显示提示词 QStringList list = { "hello","how","123" }; QCompleter *com = new QCompleter(list, this); com->setCaseSensitivity(Qt::CaseInsensitive); ui.SendEdit->setCompleter(com); 效果: 2、添加提示语 ui.SendEdit->setPlaceholderText(tr(“请

sinat_30034481的博客 2468

openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw-cn的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 10万+

VS+Qt联合编程打开ui界面闪退的解决办法

VS+Qt联合编程打开ui界面闪退的解决办法

Coderwind的博客 1017

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

QLineEdit限制输入格式

使用正则表达式QRegExp,在Qt帮助文档中有详细使用说明。 1.限制普通输入 拿ip设置输入框为例: 在输入框所在界面构造函数中写入: QRegExp regExp("[0-9.]{1,15}"); ui->lineEdit_ipv4_addr->setValidator(new QRegExpValidator(regExp,this)); ui...

Poseidon's Maserati 2870

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

qt输入框控制输入

在 Qt 中,您可以使用正则表达式来限制输入框只能输入数字和破折号(“-”)。

qq_34512507的博客 1113

【QT控件】输入类控件详解

本文详细介绍了Qt框架中常用输入控件的使用方法,包括QLineEdit(单行文本框)、QTextEdit(多行文本框)、QComboBox(下拉框)、QSpinBox(数字微调框)、QDateTimeEdit(日期时间控件)、QDial(旋钮)和QSlider(滑动条)等。

uyeonashi的博客 1882

element-ui / 表单之正整数验证,小数点后为0也要除外

// template中: <el-form :model="dialogForm" ref="dialogForm" :rules="dialogFormRules"> <el-form-item label="年龄" prop="age"> <el-input v-model.trim="dialogForm.age"> ...

Akatsuki233的博客 5787

Qt6学习笔记四(ui使用、资源文件添加)

Qt6学习笔记四资源文件将图片文件拷贝到项目目录下添加Resource File使用Resource File的内容 创建一个新的项目 然后可以看到有个.ui文件 双击进入界面编辑的界面 可以直接输入在菜单栏(QMenuBar)输入 然后回车 但是里面的QAction 没办法输入中文,(因此它默认生成一个QAction对象,以这个名字,因此不能有中文) 右下角可以看到对象名就是以输入的英文取得 但是可以修改它的text,修改它的文本显示 右击MainWindow可以添加工具栏、状态栏等内容 还可

菊头蝙蝠的博客 2754

【Qt开发】输入类控件

Line Edit、Text Edit、Combo Box、Spin Box、Date Edit和Time Edit、Dial、Slider输出类控件的说明

m0_74246469的博客 1098

java从文件中输入

关于java的输入和输出: 1.从键盘中输入 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextLine())//判断是否有输入一行数据 { String t...

仰望星空 1398

在VS中双击ui文件或在qt中无法打开,直接闪退

用vs和qt时无法打开UI文件,每次都未响应,用QtDesigner也无法启动

weixin_64675936的博客 271

安装element-ui、axios、qs、mockjs

一、 安装element-ui # 切换到项目根目录 cd vueadmin-vue # 或者直接在idea中执行下面命令 # 安装element-ui cnpm install element-ui --save PS D:\RuXingDemo\后台管理项目\前端Vue+Element\VueAdmin> cnpm install element-ui --save √ Installed 1 packages √ Linked 10 latest versions [1/1] scripts.

OnlyRu丶小心心 1399

Qt/GUI-输入系统-输入限制

Qt输入框正则表达式的配置与使用,及Qt正则表达式不生效情况的分析..

Dahe.qu 883

java输入求闰年_java输入年份判断闰年

{ return day; } //功能方法 //方法: 判断当年是否为闰年 p...("输入日期错误"); break; } // 首先判断是不是闰年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { b = true; } ......\\d{1,2}\\3\\d{1,2}$)|(^\\d{4}年\\d...

weixin_29530431的博客 811

QTableWidget、QTableView表格设置输入限制0到255、0到128

项目需求: 表格里某些行/列要求限制用户只能输入0到255之间的数字,某些行/列限制只能输入0到128 实现: 通过自定义代理类的方式。继承QStyledItemDelegate(不会导致QSS失效)或者QItemDelegate(会导致QSS失效),官方推荐继承QStyledItemDelegate 头文件: #ifndef CUSTOMITEMDELEGRATE_H #define CUSTOMITEMDELEGRATE_H #include <QWidget> #includ

jdljldsflj的专栏 1万+

【QT】输入类控件 详解

本地时间则是基于不同的时区, 对 UTC 时间做出了一些调整. 比如咱们使用的北京时间, 位于"东八区", 就需要在 UTC 时间基础上 +8 个小时的时差.UTC 时间是一个基于原子钟的标准时间. 不受地球的自转周期影响. 和格林威治时间 (GMT) 是非常接近的. 科学家会通过精密的设备来测量并维护.因此 Qt 就自己打造了一套库, 实现了字符串, 容器, 文件操作, 多线程, 网络操作, 定时器, 正则表达式等内容.

2501_91285621的博客 842
上一篇: Q&A——资源管理(五)
下一篇: Q&A——资源管理(六)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值