zoukankan      html  css  js  c++  java
  • UGUI优化

      UGUI网格重建

      UGUI网格重建是以Canvas为单位进行的,整个Canvas下面的UI元素会合并成一个Mesh进行更新。

      1. 动静分离。把Canvas下面动态的元素拆分到另外一个Canvas下面。

      2. 对于一些UI颜色变化,不去修改image上自带的color属性(实际修改的是image顶点上的属性),改为创建一个自定义的材质赋给image,然后去改变材质的Color。

      事件监测

      UGUI的事件监测,其实是Canvas下面挂了一个Graphic Raycaster组件去遍历整个Cavas下所有UI元素下RayCast Target属性是否允许点击。所以把不需要点击的UI元素的Raycast Target勾选掉。

      当需要有透明层做事件监听时,为了防止UI重叠,可以去掉image组件然后使用脚本代替image组件下Raycast Target属性。

    public class NoDrawingRayCast : UnityEngine.UI.Graphic
        {
            public override void SetMaterialDirty()
            {
            }
            public override void SetVerticesDirty()
            {
            }
    
    #pragma warning disable CS0672 // Member overrides obsolete member
            protected override void OnFillVBO(List<UIVertex> vbo)
    #pragma warning restore CS0672 // Member overrides obsolete member
            {
    //            vbo.Clear();
            }
        }

      Overdraw

      在某个背景上有个按钮,要将俺就绘制在背景上,这个就是Overdraw,Overdraw无法避免,只能选择优化降低

      1. 文字部分

      主要是使用了Outline,Outline实现方式是将Text的四个顶点传过去复制四份。可以尝试使用Textmesh Pro或者采用Shader

      使用Shadow

      字体在image上方,UGUI会自定检测优化

      2. Mask

      Unity的Mask组件会增加一层Overdraw,还会增加4个DrawCall。解决方法:

      1)尽量不用

      2)使用RectMask2D代替,缺点只能用于矩形。

      3)使用MeskMask。参考地址:https://www.cnblogs.com/leoin2012/p/6822859.html

      3. 图片属性

      对于slide九宫格图片,如果能取消Fill Center属性就取消它,这样中心区域就不会渲染

      图片重合的地方,能不重合就不要重合

      取消无用的image组件

      Image图片不设置Tiled类型

    注:

      在渲染上,GPU、CPU两者的性能瓶颈往往是CPU;GPU的性能瓶颈往往是像素点填充率(Overdraw导致),CPU的性能瓶颈往往是Drawcall。所以,渲染性能排查,几项指标关注优先级应该是:Drawcall > Overdraw > 面片  

  • 相关阅读:
    使用telnet模拟http请求
    07_Python变量内存地址、小数据池
    04_Linux命令
    03_Linux文件和目录
    06_Python Encoded
    05_Python Format Operation
    04_Python Data Structures
    02_Python基本数据类型
    01_软件开发流程
    03_线性表应用一:栈
  • 原文地址:https://www.cnblogs.com/ogaligong/p/12372739.html
Copyright © 2011-2022 走看看