Unity中隱藏UI界面最佳解決方案

一:通用解決方案

——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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章