• 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 > 面片  

  • 相关阅读:
    进程详解(1)——可能是最深入浅出的进程学习笔记
    贪吃蛇游戏C语言源代码学习
    经典功率谱估计及Matlab仿真
    CAN总线(一)
    实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
    Linux驱动开发概述
    assert的用法
    基于WDF的PCI/PCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)
    基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
    C语言中的union
  • 原文地址:https://www.cnblogs.com/ogaligong/p/12372739.html
Copyright © 2020-2023  润新知