UGUI的問題戳粒,Canvas的Screen Space - Camera和Screen Space - Overlay性能有差別嗎玉凯?
Overlay用起來不依賴于具體相機仲智,比較方便沉帮,但似乎設置UI&Camera的layer culling無效,在移出屏幕后也不會被U3d自動裁剪掉(draw calls不變)珍剑。
因此如果用Overlay掸宛,在做UI切換的時候不能用layer culling來隱藏;
如果用移出屏幕的方式招拙,依然會有draw calls(以及vs)旁涤;
如果用SetActive在復雜界面會調用一堆OnDisable比較慢;
如果用Canvas.enabled = false或 GetComponentsInChildren<CanvasRenderer>()翔曲,foreach to "CanvasRenderer.enabled = false" + GraphicRaycaster.enabled=false 寫起來比較麻煩。
因此切換UI界面時劈愚,緩存\隱藏\顯示UI界面的正確姿勢到底應該是怎樣的?
Screen Space - Camera 模式挺好,加特效容易
多相機開銷挺小
“Canvas就是畫布了闻妓,下面掛的UICamera 和 UIForward攝像機菌羽。
UICamera 下面掛著所有的uGUI的UI控件,它的深度大于MainCamera由缆。"
關于這兩句注祖,如果選擇了screen space - camera模式的話,這么做并沒有任何實際意義均唉。
因為此時畫布應該跟著相機的位置移動是晨。但如果相機是畫布的子物體,按照邏輯相機又會跟著畫布移動舔箭。
這樣就造成一個死循環(huán)罩缴。unity為了處理這個死循環(huán),還特意加了邏輯层扶,讓此時相機的子物體的rectTransform部分功能不可用箫章。
真正的項目中不是這樣子進行適配的,因為這樣子對 stretch 模式的 UI 不夠友好镜会,一半選擇是根據高度進行適配檬寂,這樣子制作UI的時候高度上是可以固定的,然后寬度上需要進行自適應戳表,和屏幕的兩邊進行對齊桶至。
因此真正的使用規(guī)則如下:
- Canvas 選擇 Screen Space-Camera 模式;
- Camera 設置成正交模式匾旭;
- Canvas Scaler 選擇 Scale With Screen Size, Screen Match Mode 選擇 Match Width Or Height镣屹,比例設為1,即只和高度進行適配季率;
- Camera 的 Clear Flags 選擇 Depth Only野瘦。