1. 程式人生 > >【Unity3D外掛】NGUI基礎學習筆記

【Unity3D外掛】NGUI基礎學習筆記

1、DrawCall:在Unity中,每次引擎準備資料並通知GPU的過程稱為一次Draw Call。Draw Call值越低,會得到更好的渲染效能。
Draw Call Tool:NGUI--》Open--》Draw Call Tool,可以檢視DrawCall的一些資訊。

影響DrawCall的因素:
Atlas數量
Font動態字型數量
渲染順序:取決於Sprite Depth深度,Unity 預設會按照控制元件的 Depth 來渲染。從後往前渲染,當使用相同材質的控制元件會合併為一個 Draw Call 。如果和前一個材質不相同則會重新產生一個 Draw Call
Panel數量

2、UI Root:
如果是Create的2D UI.會自動生成一個UI Root和其子層下生成一個Camera。
UI Root遊戲物體總是放在NGUI UI層級的最上層;
UI Root遊戲物體包括Transform元件+UIRoot指令碼元件+UIPanel指令碼元件+Rigidbody元件
UIRoot指令碼元件提供根據螢幕高度的反比來縮放UI介面的一些引數。

3、Camera:
如果是Create的2D UI.會自動生成一個UI Root和一個Camera。
2d UI是用正交相機來投射加入NGUI定製相機使得投射範圍在一個方形可視範圍內,在z軸的視覺表現上被忽略。
Camera Tool:此工具可以檢視當前場景中所有的相機,包括Main Camera和UI相機。

4、Altas圖集:
Atlas是一個容器,他包含了許多Sprite的座標資訊。與使用很多小的貼圖來渲染UI相比,使用一張包含了所有小貼圖的大貼圖的效率要高許多。這些小的貼圖就被叫做Sprite,這個大的貼圖就被叫做Atlas。
Altas Maker:NGUI提供了此工具來建立一個Altas圖集。

5、Font字型:
Font Maker:用於觀察現有的Font字型,或者製作靜態Font(Bitmap字型),動態Font。
靜態Font一般是從美工處獲取的圖片文字,需要轉換才能在NGUI裡面使用。靜態Font必須要屬於某一個Atlas。
NGUI提示,動態字型,不能被做成Atlas的一部分,使用動態字型至少會增加一次DrawCall。

6、NGUI提供的控制元件:
Prefab Toolbar:此工具下提供了很多常用的控制元件,可以直接使用。
元件:UI元件基本上是以UI開頭的指令碼元件,如UISprite、UILable、UIWidget等。
控制元件:我是這麼理解的,由一個空的GameObject+一個或多個元件,就可以組成一個控制元件,比如:
Button:Transform+UISprite(Script)+UIButton(Script)+Box Collider+UIPlay Sound
Sprite:Transform+UISprite(Script)//所以說Sprite是一個控制元件,UISprite是一個元件

7、Panel控制元件以及UIPanel元件:
UIPanel負責建立實際的集合圖形。你不需要手動的新增UIPanel-一旦你建立一個控制元件,它會自動被新增。如果你想將你的UI渲染拆分到不同的DrawCall中,你可以手動建立你自己的UIPanel,例如你要建立一個分屏的遊戲,每個屏用一個攝像機進行渲染,這種秦光下你就需要2個UIPanel來避免控制元件互相重疊。
Panel Tool:檢視當前場景中NGUI建立的所有Panel及其資訊。

8、Widget(Container)控制元件以及UIWidget元件:
其他元件的容器。
Widget Tool(Widget Wizard):控制元件建立嚮導,可以向UI的遊戲物體上(如UI Root)新增各種控制元件。

9、NGUI事件機制:
NGUI的事件觸發都必須新增Box Collider,並勾選Is Trigger,在Inspector視窗設定Box大小尺寸,可以在Widget的Collider勾選auto-adjust to match。還有一個比較重要的引數需要設定正確,即是UI Root下Camera引數,在Inspector視窗中,要確定UICamera中的Event Type選擇3D UI,Event Mask選擇Everything。
Box Collider:Button本身就帶有OnClick事件,但是Sprite,Label等( 也綁有Widget的)並沒有觸發事件,所以必須手動新增Box Collider。
事件註冊方法:
直接將MonoBehaviour的指令碼上的方法繫結至Notifiy上面。這種方法不夠靈活,不推薦。
在需要接收事件的gameobject上附加Event Listener。新增component->NGUI->Internal->Event Listener。
在任何一個指令碼或者類中即可得到按鈕的點選事件、把如下程式碼放在任意類中或者指令碼中。
void Awake () 
{    
    //獲取需要監聽的按鈕物件
    GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
    //設定這個按鈕的監聽,指向本類的ButtonClick方法中。
    UIEventListener.Get(button).onClick = ButtonClick;
}
//計算按鈕的點選事件
void ButtonClick(GameObject button)
{
    Debug.Log("GameObject " + button.name);
}
10、Tween:
NGUI的動畫系統,給UI遊戲物體新增動畫效果。