UGUI图集的理解与使用

什么是图集?

在使用3D技术开发2D游戏或制作UI时(即使用GPU绘制),都会使用到图集,而使用CPU渲染的2D游戏和UI则不存在图集这个概念(比如Flash的原生显示列表),那么什么是图集呢?准确的说法图集是一张包含了多个小图的大图和一份记录了每个小图id、位置、尺寸等数据的数据文件,一个图集应该对应两个文件,当然也有人把数据集成到图片中,导致看起来只有一张图片(参考自DragonBones的做法)。

为什么要用图集?

使用图集可以说是多加了一个步骤 但是这个步骤不是没有意义的

他可以有效的减少drawcall的数量,多张图片需要多个drawcall,而如果我们合成一个大图 只需要一个drawcall.

减少内存占用:OpenGL ES中每张贴图都需要设置成2的n次方才能使用。比如你有一张宽高为100x100和一张宽高为10x10的图片,如果不合成大贴图,那么需要使用128x128和16x16的两张图片(分别是2的7次方和2的4次方),但如果使用一张大图的话,可以把100x100和10x10的图片放到128x128的大图中,这样就用一张图片。
 

在GPU已经成为PC、手机等设备的必备组件的现在,把所有显示的绘制操作交给专门处理图像的GPU显然比交给CPU更合适,这样空闲下来的CPU可以集中力量处理游戏的逻辑运算。

而GPU处理图像的做法和CPU是不一样的,在GPU中,我们要绘制一个图像需要提交图片(即纹理)到显存,然后在进行绘制(这个过程称为一次DrawCall),那么如果我们一帧要绘制100个就需要提交100次图片,如果使用包含了这100图片的图集,只需要一次提交即可,即一次DrawCall就搞定,处理效率上会有很大的提升。

另外使用图集也方便管理和归类各个模块的图片,可以通过一次加载和一次卸载完成多个图片的处理,同理,加载次数也下来了,可以提升运行效率。

总结:

  1. 减少DrawCall
  2. 图集将图片打包为2的幂次方的素材大小,减少内存的占用, 一次加载和一次卸载完成多个图片的处理
  3. 减小包体大小

Unity2D中的图集

其实用过NGUI的同学都知道在拼界面之前都必须先制作好对应的图集才行,然而在Unity2D或UGUI中,Unity却自己集成了图集的操作,目的是让我们忘掉图集的存在,更加关注设计这个层面。

NGUI是必须先打出图集然后才能开始做界面。因为始终都要去考虑你的UI图集。比如图集会不会超1024 ,图集该如何来规划

UGUI的原理则是,让开发者彻底模糊图集的概念,让开发者不要去关心自己的图集。做界面的时候只用小图,而在最终打包的时候unity才会把你的小图和并在一张大的图集里面。然而这一切一切都是自动完成的,开发者不需要去care它。

打包图集

Editor->Project Settings 下面有sprite packer的模式。

Disabled表示不启用它,

Enabled For Builds 表示只有打包的时候才会启用它,

Always Enabled 表示永远启用它。

这里的启用它就表示是否将小图自动打成图集。

Sprite Atlas与Sprite Mask详解_Peter_Gao_的博客-CSDN博客

Unity中的Frame Debug中的渲染顺序以及数量和Profiler中看到的Draw Call数量,以及在高通的调试工具里看到的DrawCall 数,到底什么关系?哪个数值是影响渲染的重要指标? -- UWA问答 | 游戏开发者互动问答社区 | 侑虎科技

猜你喜欢

转载自blog.csdn.net/qq_42672770/article/details/126710592