Unity DrawCall优化 - UGUI优化

一、DrawCall是什么?

Unity 展示出来的画面,是通过GPU绘制出来,才显示出来的。

在场景中,一个场景内的物体,分几个批次提交给显卡来绘制,就是几个DrawCall。

在Unity中,两个地方可以查看DrawCall,

1.在Game视口,的Stats,点击一下打开一个窗口,Batches:后面的就是Drawcall值。

2.运行时,在菜单栏Window->Analysis->Profilter.再打开的窗口中,点击Rendering,在底部蚕食信息中就会有Draw Calls:就是了。

 二、降低DrawCall为什么对性能有好处?

1.cpu:一次提交给GPU,会比多次提交的性能更好,省cpu;

2.gpu:吞吐量,一次性处理多少个面(Unity是三角面),每次提交的物体越多,GPU性能就更容易发挥。

三、UGUI降低DrawCall的方法

 没有优化前的DrawCall,如下图(可以看出目前消耗DC是14):

 3.1那么问题来了,如何查看UGUI占了几个DC呢?

其实很简单,就是运行时,通过隐藏UGUI来查看,Batches的值变化,比如下面操作:

没有隐藏前,查看是14个DC

隐藏后,查看是2个DC 

 说明了,我们这个UGUI界面,占用了14-2 = 12个DC,

其中这2个DC是什么呢?其实一个是天空盒一个是默认背景。

3.2UGUI如何降低DC呢?

合并DC要满足几个条件:1.shader得一样;2.纹理对象要一样;满足了这两个条件才能合并到一个DC。

在这里界面的DC有12个,主要原因是每个图都是单独的,每一次渲染都是单独的DC,

要想减少他们的渲染,可以将他们打入到同一个图集中,然后在绘制UGUI的时候,根据纹理坐标,找到对应的小图。

这样,在同一图集中,就满足了同一个纹理,同一个shader,可以合并为一个DC了。

3.3如果打图集呢?

UGUI常用优化DC的手段,就是将GUI图片打成图集

3.3.1.开启图集模式

在菜单栏Edit--> Project Settings-->Editor-->EditorSettings-->Sprite packer;

将Sprite Packer 的 Mode 设置为 Always Enabled;

 这样设置即可。

3.3.2 指定哪些图片打入到同一个图集

注意:博主用的是Unity2020版本,在这之前的版本(2019以前),以上设置后,PackingTag即可使用了,但是在Unity2020 之后,需要在添加一个包2DSprit

2DSprit包添加,

        3.3.2.1 在菜单栏Window-->Package Manager,打开该界面后,选择Unity Registry,

然后在下面列表中即可看到2DSprite ,点击Install安装即可。

在图片中有一个 PackingTag ,将所选图片,

        3.3.2.2 然后手动创建一个Sprite Atlas文件

在Project视图右键,Create>2D>Sprite Atlas。

        3.3.2.3 添加要打包的图片或文件夹

将要打包的图片或文件夹,放置到图集文件的Objects for Packing中。然后单击PackPreview按钮,可以看到图集预览。 

 然后点击 Pack Preview 即可查看图集内容了。

 打好图集后,再次运行,看下DC情况(DrawCall为4):

 减去天空盒和背景的两个,4-2=2就是2个DC.

3.3.3 为什么这个界面占用了2个DC呢?

仔细看下这张图

其实是文字(Text)和图片各占了一个DC,所以是2个。

3.4 Text的主要原理与DC的影响

 Text对于Unity来讲,底层用的和Image是同样的shader;

也就是说 Text --> Image 是一样的,就是文字贴图;

Unity的Text的核心原理:

        通过Text组件 + 矢量字库 + 字体大小 +文本内容   来生成一个 贴图;

        最后Unity底层把文本当贴图对待,只不过这个贴图不是image,而是通过Text组件,绘制到一个纹理贴图对象上的。

Unity对Text的处理:

        再上图里可以看出,有多个Label,但只形成了1个DC。

        Unity在处理多个Label的时候,尽可能的将文字绘制到一个纹理里(当然这里受纹理图集的大小限制),跟文本内容和字体的大小、字号、样式没有关系。

四、RawImage对DrawCall的影响

RawImage 与 Image有什么区别?

1.RawImage支持Sprite + Texture,Image只支持Sprite;

2.RawImage支持设置UV坐标,Image不支持;

3.Image支持做一些其他效果(比如九宫格),RawImage单独占用一个DC,无法合并DC(即使是同一图集,不同图片,是不能合并的)。

4.RawImage会打乱DC的渲染顺序(如果RawImage影响了正常的DC渲染,以RawImage为节点,DC会拆分)

...

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity-UGUIUnity游戏引擎中的一个UI系统,可以用来创建和管理用户界面。它提供了丰富的功能和工具,使得开发者能够轻松地制作各种表格。 使用Unity-UGUI制作表格的步骤如下: 1. 创建Canvas对象:在Unity中,首先需要创建一个Canvas对象,作为UI渲染的容器。选择GameObject -> UI -> Canvas,即可创建一个Canvas对象。 2. 添加Table组件:选择Canvas对象,在Inspector面板中点击"Add Component"按钮,然后在搜索栏中输入"Table",选择适合的Table组件,点击添加。 3. 设置表格的行列数:在Table组件的Inspector面板中,设置表格所需的行数和列数。 4. 设置表格样式:可以在Inspector面板中设置表格的颜色、大小等属性,以满足具体需求。 5. 添加表格内容:可以通过代码或者拖拽方式,向表格中添加所需的文本或图片。可以通过操作表格的行列索引,将内容放置在特定的位置。 6. 设置表格的交互性:可以为表格中的每个单元格添加点击事件或其他交互效果,提升用户体验。 7. 调整表格布局:可以通过调整Canvas的大小、位置,或者改变组件之间的层次关系,来调整表格的布局。 8. 完善表格功能:可以根据具体需求,添加更多表格的功能,比如排序、过滤、搜索等。 9. 测试和优化:在表格制作完成后,可以进行测试,查看表格的显示效果和交互效果,并进行优化。 总之,使用Unity-UGUI制作表格,只需简单的操作和设置,就能够创建出各种样式、功能丰富的表格,满足游戏或应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GarFe-Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值