zoukankan      html  css  js  c++  java
  • UGUI优化方案之 SetActive 和 CanvasGroup

    UGUI的开关方案一种是使用SetActive进行的

    但是这种方案其实有一个弊端,我们来测试下

     每帧进行1000次的SetActive 的true和false

    这是我们的UI,上面挂了一些 按钮 图片  输入  等元素

    帧率只有2.4,我们看下Profiler

     可以看到 GameObject.Activate 和 GameObject.Deactivate 消耗很高,这就是因为大量调用了SetActive

    点开查看

     可发现其主要原因是SetActive会触发子物体的OnEnable和OnDisable方法,而且这2个方法是有GC的

    使得整体带来了GC的消耗

    SetActive---------------->OnEnable  OnDisable--------------->GC开销

    接下来,我们看下CanvasGroup的表现

     

     帧率可维持在60多,GC瞬间没有了,对比强烈

    稳定!

    SetActive是因为出发unity的MonoBehaviour的生命周期,所以造成GC的消耗

    不过注意如果使用了 CanvasGroup 的Alpha来控制界面的显隐,挂载的Monobehaviour脚本是一直执行的,如果你有Update方法的话,这个地方需要自行控制下,SetActive则不需要担心这点

  • 相关阅读:
    Spring boot 请求接口404
    Windows下安装Redis
    利用maven的profiles灵活的配置多环境
    各个JSON技术的比较
    常用工具软件
    Java方法 传值方式
    JVM内存模型
    spring-task解决定时问题
    quartz Cron表达式解读
    maven 常用命令
  • 原文地址:https://www.cnblogs.com/sanyejun/p/14744829.html
Copyright © 2011-2022 走看看