目前游戲中的UI使用了UGUI,開始的時候沒有做二次封裝,所以做界面的時候就用了偷懶的辦法,使用CanvasGroup的Alpha來控制界面的開啟和關閉,看起來也沒啥區別。但是心里總有點擔心,畢竟界面沒有SetActive(false),由於沒看UGUI底層的代碼,不知道性能的差距,今天正好做到這里,就進行了一下測試。
先說說測試用例:100個物體上掛了CanvasGroup和Image,它們每個下面又有5個Image(Image都是半透明的圖片),然后隔一段時間控制物體上CanvasGroup.Alpha的數值,跟隔一段時間控制物體的Active做幀數比較。
比較結果如下:
alpha=1時:
alpha=0時:
active=true時:
active=false時:
由上可以看出,這兩種方式在界面全部關閉時,性能幾乎沒有差距,而且控制alpha的方式還避免了切換時調用Activate/Deactivate的開銷,同時提供了界面fade的功能。
第二步測試是針對Blur Behind這個插件的,插件提供了UI上的模糊背景功能,而且開銷相對來說比較小,非常值得使用。(資源官方地址:https://www.assetstore.unity3d.com/cn/#!/content/44686)下面就要測試兩種界面關閉的方式在界面上使用插件情況下的性能。(界面開啟時就不貼圖了)
active=false時:
alpha=0時:
可以看出幀數也沒有區別,所以可知CanvasGroup在alpha為0時,其下的元素都是不參與繪制的。
值得一提的是插件在UI重疊時並沒有帶來額外的開銷,這點對於UI復雜的游戲是非常友好的。