1.对于UGUI中的Image和RawImage的区别

在unity中简单的有两种Image 一种是简单的Image 还有一种是RawImage

这两种从用发上看RawImage的功能更强大 但相对的也更加消耗性能

在导入图片时 系统默认TextureType时为Default类型的

Unity IOS Build 图形API_项目优化

但是Image只能使用Sprite (2D and UI)类型的图片,这样就相对于Image有了局限性

Unity IOS Build 图形API_游戏_02


但是对于RawImage来说 他需要的类型是Texture 类型的这样就没有了局限性

在一些相对限制的项目中就能省去一大堆麻烦的操作

比如把sprite转换成Texture(亲身体验 费力不讨好)

Unity IOS Build 图形API_项目优化_03


但是如果只是单纯放一张背景图片或者是裁剪旋转 用一张Image就可以了 性能可以好很多

2.对于UGUI的一些优化的方法

对于项目成型之后 很可能面临项目优化的问题 当游戏其他方面优化做完之后如果还是存在卡顿等问题
或者是优化还是不够要求 我们就可以考虑对UI进行优化了

1.动静划分

对于我们设计的UI 我们可能有很多经常变化的东西
比如说 分数 操作按钮 或者是对话框的文字等 这些我们把它划分为动的UI
还有一些静的 比如很不常用的按钮 任务的头像那些
我们尽量把动的和静的划分开
这样可以减少UIMesh动态更新,在某些比较复杂,常驻的界面可以这样优化。小的界面就没必要了,因为不必要的节点有可能会造成drawcall的增加的。
可以达到优化的效果

2.合理增加UI层级的深度
我们有很多时候需要加深UI的层级 来达到我们想要的效果
但是这个也是要控制的 在不必要的情况下,我们尽量减少UI层级的深度,在UGUI中Hierarchy面板,节点的的深度,表现的就是UI层级的深度,我们UI中有N层,N越大越靠前,会遮住后面的组件。当深度越深,不处在同一层级的UI就越多,drawcall就会越大。

3.mask使用的次数要少
每存在一个mask,就把mask以内和以外的UI分割成两个“部分”,依次计算两个“部分”的drawcall,然后再相加。原因是mask以内和以外的UI不能通过unity3d一次渲染(batch)。所以在使用mask的时候要仔细思考,能不用就不用,实在要用可以考虑用带通道的图片代替mask的遮罩功能。

4.注意不要图文交叉

所说的图文交叉就是text和Image的交叉

这里也不是单单的这两种 还有按钮那些都是

Unity IOS Build 图形API_项目优化_04


比如上边这样

这是因为当2张图片(同一图集),1个文字进行重叠时,处理不好会发生一些drawcall的多余 会有多余的内存的消耗

5.image和text组件的Raycast Target属性

在组件不需要射线检测的时候,我们可以尽可能的把射线检测去掉,在运行的时候,就可以减少不必要的性能开销。

就这么多吧 上边我介绍了一些优化的方法以及Image和RawImage的区别,希望对大家有用
如果你也是游戏开发爱好者 欢迎关注我的博客 我会在这里持续更新我的学习过程
我是一名爱健身的准程序员