1.对于UGUI中的Image和RawImage的区别
在unity中简单的有两种Image 一种是简单的Image 还有一种是RawImage
这两种从用发上看RawImage的功能更强大 但相对的也更加消耗性能
在导入图片时 系统默认TextureType时为Default类型的
但是Image只能使用Sprite (2D and UI)类型的图片,这样就相对于Image有了局限性
但是对于RawImage来说 他需要的类型是Texture 类型的这样就没有了局限性
在一些相对限制的项目中就能省去一大堆麻烦的操作
比如把sprite转换成Texture(亲身体验 费力不讨好)
但是如果只是单纯放一张背景图片或者是裁剪旋转 用一张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的交叉
这里也不是单单的这两种 还有按钮那些都是
比如上边这样
这是因为当2张图片(同一图集),1个文字进行重叠时,处理不好会发生一些drawcall的多余 会有多余的内存的消耗
5.image和text组件的Raycast Target属性
在组件不需要射线检测的时候,我们可以尽可能的把射线检测去掉,在运行的时候,就可以减少不必要的性能开销。
就这么多吧 上边我介绍了一些优化的方法以及Image和RawImage的区别,希望对大家有用
如果你也是游戏开发爱好者 欢迎关注我的博客 我会在这里持续更新我的学习过程
我是一名爱健身的准程序员