unity UI如何开启(显示)或者关闭(隐藏)Panel界面相信大家都是知道的,但是如何做最好呢
可能大家一般开启/关闭界面的方法就是直接SetActive吧。这样做通常是可以的简答快速地解决需求,但是它又两个问题:
第一Disable掉的物体上面的脚本也不运行了,而很多时候我们需要那个脚本运行这样就不能用挂在自己身上腳本把自己SetActive(true)或者SetActive(false)。如果把自己的引用给另外一个脚本来对自己SetActive(true)或者SetActive(false)又会造成多余的耦合,并不符合OOP设计理念
第二,Disable掉的物体重新SetActive(true),會造成较大的性能消耗如果此界面draw call较多,会有明显的延迟
以下是大家可能想到的其他方法,它们也各有各的问题:
问题:改回后draw call加倍;大量垃圾回收;
方法:将界面移除Canvas这个父物体;
问题:改回后draw call加倍;大量垃圾回收;而且新增父物体增加额外引用耦合;
问题:改回后延迟严重;而且不方便使用;
这些都不好那你说,什么方法可行呢
这个解决方法就是给Panel加一个CanvasGroup,上面提到的问题,在它身上都不会发生;