[Unity] UISprite和UITexture浅谈

查看:1082 |回复:15 | 2015-3-28 15:04:28

您需要 登录 才可以下载或查看,没有账号?注册

x
62.jpg
NGUI的三大组件,UILabel、UISprite、UITexture,它们三个同时都继承UIWidget。先回到一个很郁闷的话题上,到底是优化DrawCall还是优化内存。

UISprite : NGUI引入图集的概念,不考虑ABA叠层的情况下,一个图集内的图片用UISprite,那么它就是一个DrawCall。但是如果你做了一个图集是1024X1024的。此时你的界面上只用了图集中的一张很小的图,那么很抱歉1024X1024这张大图都需要载入你的内存里面,1024就是4M的内存,如果你做了10个1024的图集,你的界面上刚好都只用了每个图集里面的一张小图,那么再次抱歉你的内存直接飙40M。另外生成出来的Atlas我记得默认会打开mipMap的选项,mipMap是摄像机离得远近用不同的图片,用来减少渲染,可是UI绝对不会出现远近之分,mipMap会让你的包占更大的容量,因为是两张图。
如下图所示,Atlas图集生成完以后,选择Advanced,不要勾选Generate MipMaps ,也不要勾选Read/Write Enabled ,不然1024在内存里就不4M了将变成8M。。
2326551652530d331.png

那么NGUI的内存怎么施放呢?我建议最好不要手动施放,因为Unity有一套非常完善自动施放内存的方法。如果你的项目不变态,切场景的时候就用异步切换场景。
yield return Application.LoadLevelAsync(name);
我发现很多人喜欢切场景的时候,在调用一下Resources.unloadunnsedAssets,这是多此一举的。
Resources.UnloadUnusedAssets ();
当场景切换完毕后,Unity会自动施放没有被引用的内存。 我记得NGUI3.X某一个版本是存在内存泄漏的问题,后来我们专门升级了新版本,扯远了,回到正题!
UITexture:它完全没有图集的概念,使用起来非常的灵活,只需要把图片挂上去就行了。这样内存里只会占用你这一张图的大小,内存虽然小了但是DrawCall就上去了。因为每一张UITexture就是一次DrawCall。如果你发现你的UITexture图片大小不对了,是因为图片拖进Unity默认图片的格式会设置成Texture,它的NonPower of2 是默认打开的,所以他会缩放你的图片成2的幂次方,所以你可以把图片格式改成GUI。
图片格式: NGUI生成的图集的图片格式是PNG,但是无论是什么格式的图片,Unity都会自己搞一套格式,并且打包的时候也不会用你文件夹下图片的格式,而是Unity自己的格式。如果你用UITexture你可以真对每一张图来修改它的格式,比如一些颜色数比较少的图片,你可以直接用16bit,如果你的图片没有用到透明,你可以用pvr或者etc,这样你的图片会更小。可是UISprite就不行,只要其中有一张小图用了透明,你就得用RGBA32,不然UI就会很难看,你可以自己试试。
除了UITexture 和 Atlas的图片没办法以外(因为必须有透明),不是建议是必须,你的贴图无论如何都必须是2的幂次方。因为只有2的幂次方图片 并且没有透明通道才会被压缩,IOS会压缩成pvr格式,Android会压缩成ETC格式,压缩以后图片会小很多的,好几倍的小。
人物贴图、场景贴图、特效贴图、一定要2的幂次方!切记!!

我觉得界面中那些重复性比较高的图片最好打成图集,而一些原画,或者背景图建议直接使用UITexture。还有NGUI的图集其实很占用内存,也很占用空间,为了优化效率尽量让策划拖妥协让UI尽可能的复用。
所以做项目初期就要好好的管理自己的图集,这也是个很郁闷的话题,因为需求一直都在变所以你很难规划你的图集,你不知道美术会设计出来什么样的图,你也不知道策划会设计出来什么样的界面,所以你很难去确定你的公共图集 还有 界面特有图集该如何来规划。因为一不小心你的图集就会超过1024,你也不知道那些资源复用性最高。。这也是我觉得NGUI最郁闷的一点。。如果那一天做UI不用自己去规划图集而是运行时系统最优选择,那该多好呀!!!

2015-3-28 15:04:28  
 赞 赞 1

使用道具 登录

15个回答,把该问题分享到群,邀请大神一起回答。
2#
说的很好
回复 收起回复
2015-4-1 08:46:21   回复
 赞 赞 1

使用道具 登录

4#
此帖必火!鉴定完毕!
回复 收起回复
2015-4-21 12:23:26   回复
 赞 赞 1

使用道具 登录

5#
此帖必火!鉴定完毕!
回复 收起回复
2015-4-21 14:37:01   回复
 赞 赞 1

使用道具 登录

6#
不错哦 谢谢分享
回复 收起回复
2015-5-18 03:00:04   回复
 赞 赞 1

使用道具 登录

7#
爱她就去优衣库,要耍就上微元素!
回复 收起回复
2015-7-21 11:27:43   回复
 赞 赞 1

使用道具 登录

8#
给力!元素有你更精彩
回复 收起回复
2015-7-21 12:15:33   回复
 赞 赞 1

使用道具 登录

9#
给力!元素有你更精彩
回复 收起回复
2015-9-6 00:16:02   回复
 赞 赞 1

使用道具 登录

10#
资源发布哪家强?元素首发称大王!
回复 收起回复
2015-10-3 23:36:37   回复
 赞 赞 1

使用道具 登录

11#
资源甚好,发帖艰辛,且阅且珍惜!
回复 收起回复
2015-10-9 22:49:24   回复
 赞 赞 1

使用道具 登录

12#

感谢楼主的分享
回复 收起回复
2017-1-2 19:28:20   回复
 赞 赞 1

使用道具 登录

13#
{:1_144:}
回复 收起回复
2017-1-2 19:28:24   回复
 赞 赞 1

使用道具 登录

14#
{:1_146:}
回复 收起回复
2017-1-11 02:27:12   回复
 赞 赞 1

使用道具 登录

15#
首发必须微元素,挖矿撩妹两不误!
回复 收起回复
2017-1-13 21:33:37   回复
 赞 赞 1

使用道具 登录

16#
666
回复 收起回复
2018-4-4 09:14:42   回复
 赞 赞 1

使用道具 登录

17#
不错不错,味道好极了
回复 收起回复
2018-4-4 11:00:01   回复
 赞 赞 1

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表