本節書摘來異步社群《unity 3d ngui 實戰教程》一書中的第2章,第2.6節,作者: 高雪峰 責編: 張濤,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
unity 3d ngui 實戰教程
先建立一個2dui(建立方法上文已講過),然後在2dui的“根”uiroot下建立兩個精靈(建立方法後面會詳解)。然後得到的效果如圖2.32所示。

從圖2.32中可以看到,建立的兩個sprite為兩個按鈕圖檔,它們的位置在uiroot的紅框(視窗)上,也就是sprite的z軸、相機的z軸、uiroot的z軸都為0,因為2dui都是純粹的2d圖檔按層次顯示,不會出現三維立體效果,是以都是直接緊貼着視窗,隻要ui控件在uiroot的紅框範圍内,那麼ui就能夠正常顯示在game上。在game視圖中,我們看到的景象如圖2.33所示。
2dui最本質的意義是:ui錄影機是一個正交錄影機。
同上2.6.1小節一樣,先建立一個3dui,然後在“根”下面建立兩個sprite,得到如圖2.34所示的景象。
從圖2.34中可以看到,在3dui下,建立的ui控件都在一個三維立體空間中,錄影機是一個透視的錄影機,這和2dui有着截然不同的差別,因為2dui是一個正交錄影機。
3dui中uiroot的坐标點如圖2.34所示,是在三維空間的一個點上,這個位置是建立ui時自動定義好的,以後建立的ui控件都會自動地在這個點所在的面上生成(自動統一到uiroot的z 軸,因為sprite屬于uiroot的子物體),是以圖2.34中uiroot根物體和兩個建立的sprite的z 軸都為0,而camera的z 軸為-700。
我們在圖2.34生成的兩個sprite用3dui做出的效果,在game視圖裡看,和2dui幾乎是一模一樣的,如圖2.35所示。
但是需要注意的是,如果需要将2dui改為3dui,不是簡單地将錄影機改為透視模式就行了,在ngui 3.6.0以後的某些版本中,這樣會導緻看不到任何ui控件(這些版本的2dui的控件和camera、uiroot三者在同一個z軸面上,而變成3d錄影機後是看不到和錄影機同z軸的物體),如果将3dui的錄影機直接改為正交模式,也并不能簡單地變成2dui,因為正交相機的size并不和ngui預設的值一樣。是以,在進行ui開發時,最好先思考一下将要使用2d還是3dui更好。
上文中我們講解了2dui和3dui的原理,那麼在實際的項目開發中,如何來判斷應該使用哪一種ui呢?有以下一些規律可以參考。
(1)新版本的ngui對3dui支援很好,如果3dui和2dui選擇哪一個都行的情況下,建議選擇3dui,擴充性更強。
(2)如果出現ui不允許有遠近透視的大小變化,必須選擇2dui。例如,角色頭頂的血條,在人物跑遠了之後如果血條并不會變小,這時血條就必須用2dui做。
(3)如果要出現ui有三維變換的效果,例如,由遠及近的變大、三維旋轉等,就必須用3dui。
(4)無法明确知道應該用哪一種ui的情況下,建議選用3dui。
(5)不論用哪一種ui,其實本質上隻是一個錄影機的差別,基本上都能實作ui效果,隻是需要的處理不一樣,是以,如果選擇錯了ui模式也不用太着急,總有很多辦法來解決的。