攝像的渲染層的概念
Unity中,每一個物體都有一個所處的“層”的概念,也就是物體的Layer,而攝像機中可以通過設置CullingMask來決定該攝像機只渲染哪些層的物體。對於UI來說,這個原理也一樣使用,因為NGUI的每一個控件元素,本質上都屬於一個GameObject,都有自己的層;每一個UI Root都會自帶一個UI Camera來渲染UI。
利用這個原理,可以實現多個攝像機來進行UI的渲染,例如,場景里可以放置一個3D攝像機負責渲染3D UI,還可以放置一個2D攝像機,負責渲染2D UI等。理論上來說可以放置無限多個攝像機來分別渲染不同層的內容。
當場景中有兩個攝像機都會渲染同一個層的時候,會造成畫面重復顯示。
多攝像機協作的應用范圍
因為Unity中很多元素不適合和UI控件放在一起進行顯示,比如粒子、比如3D的模型。例如,在UI中顯示一個3D模型,一般就會使用一個UI攝像機來負責渲染UI控件,用另一個攝像機來渲染3D模型,然后讓這兩個攝像機渲染的內容進行疊加,呈現出一幅完整的UI圖像。
如何創建多個UI攝像機
在NGUI中,如果創建了一個UI Root,當再點開Unity頂部的NGUI菜單,企圖通過Create菜單去創建一個新的UI時,會發現創建UI的選項已經變成灰色,無法再創建,這是因為NGUI默認只允許場景中出現一個UI Root。
要創建多個UI攝像機時,首先得考慮是否需要UI Root,如果有UI圖片做成的控件,需要被UI Root根據屏幕自動進行縮放,那么就需要一個UI Root來管理這些UI控件。
為了創建多個UI Root(每個UI Root會自帶一個UI攝像機),可以關閉場景中已經存在的UI Root物體的UI Root組件,然后再單擊Unity頂部NGUI菜單通過Create創建。
如果不需要的多個UI Root,只需要一個新的UI Camera,那么可以在場景中新創建一個攝像機,創建方式為,在Unity頂部菜單單擊GameObject,選擇Create創建一個。
然后在這個新創建的攝像機上附上一個UI Camera組件即可,組件附加方法可以在Inspector面板中依次單擊AddComponent->NGUI->EventSystem(UI Camera)。如果它渲染的物體不需要接收UI的事件(如單擊拖拽等),這個UI Camera組件就沒有必要附上。
多攝像機協作的注意事項
(1)規划並設置好每個物體的Layer,不要混亂。
(2)設置好每個攝像機的CullingMask,確保場景中的攝像機之間不會重復渲染同一層。
(3)對於多個UI Root的情況,更要檢查它們所屬的層和該UI Root渲染的層是否對應。
(4)盡量不要濫用多攝像機協作。