zoukankan      html  css  js  c++  java
  • UI优化策略网格重建

     
    基于以上UGUI的网格更新原理,我们可以做以下优化:

    1:使用尽可能少的UI元素:在制作UI时,一定要仔细查检UI层级,删除不必要的UI元素,这样可以减少深度排序的时间以及Rebuild的时间。

    2:减少Rebuild的频率:将动态UI元素(频繁改变例如顶点、alpha、坐标和大小等的元素)与静态UI元素分离出来,放到特定的Canvas中。

    3:谨慎使用UI元素的active操作:因为它们会触发耗时较高的rebuild。

    4:谨慎使用Text的Best Fit选项:虽然这个选项可以动态的调整字体大小以适应UI布局而不会超框,但其代价是很高的,Unity会为用到的该元素所用到的所有字号生成图元保存在图集里,不但增加额外的生成时间,还会使得字体对应的图集变大。

    5:谨慎使用Canvas的Pixel Perfect选项:该选项的开启会导致UI元素在发生位移时,其长宽会被进行微调(为了对齐像素),从而造成layout Rebuild。(比如ScrollRect滚动时,会使得Canvas.SendWillRenderCanvas消耗较高)

    6:使用缓存池来保存ScrollView中的Item:对于移出或移进View外的的元素,不要调用disable或enable,而是把它们放到缓存池里或从缓存池中取出复用。

    7:除了rebuild过程之外,UGUI的touch处理消耗也可能会成为性能热点。因为UGUI在默认情况下会对所有可见的Graphic组件调用raycast。对于不需要接收touch事件的grahic,一定要禁用raycast。

     

    我在原作者的基础上做了以下补充。(何文西)

    补充第3个条:仅启动/禁用画布渲染组件,这样UI不被渲染,但是它会保留持久化的数据(例如VBO数据)。但是注意,这不会从GraphicRegistry中消除UI图形,所以它会在图形射线检测时仍起效。

    8:谨慎使用布局组件(Layout components):因为每次标记dirty时,它必须重新计算子元素的大小和位置。如果布局上有相对小和固定数量的元素,并且布局结构相对简单,那就尽可能用基于RectTransform的布局替换布局组件。因为RectTransform大小和位置的计算会由Ttransform系统自己在本地驱动,这通常会比依赖组件系统的性能更高。

    9:ScrollView滑动问题:未开启Pixel Perfect的时候,ScrollView滑动不会有任何重建和开销。

  • 相关阅读:
    模块和包专区
    递归函数,三级菜单专区
    内置函数和匿名函数专区
    迭代器和生成器专区
    函数进阶专区
    初始函数专区
    题解 P6282 【[USACO20OPEN]Cereal S】
    题解 P6281 【[USACO20OPEN]Social Distancing S】
    题解 P6281 【[USACO20OPEN]Social Distancing S】
    第5题:棋盘
  • 原文地址:https://www.cnblogs.com/TravelingLight/p/8990457.html
Copyright © 2011-2022 走看看