一:通用解決方案
——SetActive
優點:方便快捷
缺點:SetActive(false)的物體上面掛載的腳本也不運行了,而很多時候我們需要那個腳本運行。這樣就不能使用SetActive(true)或者SetActive(false)。如果把自己的引用給另外一個腳本來對自己SetActive(true)或者SetActive(false),又會造成多餘的耦合,並不符合OOP設計理念
——Disable
優點:方便快捷
缺點:Disable掉的物體,重新enable=true,會造成較大的性能消耗,如果此界面draw call較多,會有明顯的延遲
——更改Scale
Scale改爲(0,0,0),再改爲(1,1,1)
缺點:改回後draw call加倍。大量垃圾回收
——將界面移除Canvas這個父物體
缺點:改回後draw call加倍。大量垃圾回收。而且新增父物體增加額外引用耦合
——放在Camera的某個culling層上
缺點:改回後draw call加倍。大量垃圾回收。只對screen space-camera有效
——Canvas.enable = false
缺點:改回後延遲嚴重。而且不方便使用
二:最優解決方案
給Panel加一個CanvasGroup,控制CanvasGroup組件的屬性
//顯示
GetComponent<CanvasGroup>().alpha = 1;
GetComponent<CanvasGroup>().interactable = true;
GetComponent<CanvasGroup>().blocksRaycasts = true;
//隱藏
GetComponent<CanvasGroup>().alpha = 0;
GetComponent<CanvasGroup>().interactable = false;
GetComponent<CanvasGroup>().blocksRaycasts = false;