unity UI如何開啟(顯示)或者關閉(隱藏)Panel界面最好?
https://segmentfault.com/a/1190000012357091
unity UI如何開啟(顯示)或者關閉(隱藏)Panel界面,相信大家都是知道的,但是如何做最好呢?
可能大家一般開啟/關閉界面的方法就是直接SetActive吧。這樣做通常是可以的,簡答快速地解決需求,但是它又兩個問題:
第一,Disable掉的物體上面的腳本也不運行了,而很多時候我們需要那個腳本運行。這樣就不能用掛在自己身上腳本把自己SetActive(true)或者SetActive(false)。如果把自己的引用給另外一個腳本來對自己SetActive(true)或者SetActive(false),又會造成多余的耦合,並不符合OOP設計理念。
不用SetActive(true)/(false)之後,我們還有什麽其他方法解決問題嗎?
以下是大家可能想到的其他方法,它們也各有各的問題:
方法:Scale改為0,0,0,再改為1,1,1;
問題:改回後draw call加倍;大量垃圾回收;
方法:將界面移除Canvas這個父物體;
問題:改回後draw call加倍;大量垃圾回收;而且新增父物體增加額外引用耦合;
方法:放在Camera的某個culling層上;
問題:改回後draw call加倍;大量垃圾回收;只對screen space-camera有效;
方法:Canvas.enable = false;
問題:改回後延遲嚴重;而且不方便使用;
這些都不好,那你說,什麽方法可行呢?
這個解決方法就是給Panel加一個CanvasGroup,上面提到的問題,在它身上都不會發生;
若要顯示:
GetComponent<CanvasGroup>().alpha = 1;
GetComponent<CanvasGroup>().interactable = true;
GetComponent<CanvasGroup>().blocksRaycasts = true;
若要隱藏:
GetComponent<CanvasGroup>().alpha = 0;
GetComponent<CanvasGroup>().blocksRaycasts = false;
unity UI如何開啟(顯示)或者關閉(隱藏)Panel界面最好?