一 优化目的
SetActive 应该是在用unity开发的当中使用最多的一个方法之一 在ui中使用可能会更多 为了应对各种各样的需求 我们可能会在代码中使用大量的 SetActive(true) SetActive(false)......
但是 很多说优化的文章都会让尽量减少使用这个方法, 因为这是个坑....
简单做一下测试
一个ui 只有一个image的前提下 update内 1000次测试
会发现带来大量的GC
还会蛮整齐GC的 哈哈哈哈哈
这也就是为什么大佬们都不建议用setactive这个方法
在每次使用的时候会遍历这个实体上所有继承MonoBehaviour的脚本
调用OnEnable和OnDisable
image继承的MaskableGraphic
嗯 写了不少 方法 算上基类的方法 产生如此多的GC也是可以理解的
然后我手贱又在这个image下挂了一个image
GameObject.Activate和GameObject.Deactivate.....
虽然我很不想看见这个情况
然后在增加一个
父物体在使用SetActive时 也会调用子物体的GameObject.Activate和GameObject.Deactivate
所以在做ui时 一个panel下挂载很多的image 调用这个panel的SetActive 其实基本等同于调用这个物体上每一个子物体的SetActive
其实问题不在于SetActive本身
而是在于这个物体上有多少脚本内有OnEnable和OnDisable这两个方法
二 优化
其实把一个物体隐藏起来并不是什么难事 我们可以有很多种选择来减少脚本内调用SetActive 从而触发OnEnable和OnDisable
1.移动到一个不显示的父物体下
2.修改scale
3.等等
但实际上每一个都有不小的坑
坑待填。 未完待续