1. 程式人生 > 實用技巧 >C#程式設計師整理的Unity 3D筆記(十五):Unity 3D UI控制元件至尊–NGUI

C#程式設計師整理的Unity 3D筆記(十五):Unity 3D UI控制元件至尊–NGUI

目前,UGUI問世不過半年(其隨著Unity 4.6釋出問世),而市面上商用的產品,UI控制元件的至尊為NGUI:影響力和廣度(可搜尋公司招聘Unity 3D,常常能看到對NGUI關鍵詞)。 NGUI雖然不是Unity 官方原生的,但以其強大的能力和友好的操作性,成為了事實上的王者—-無他,OnGUI太挫了。

通過匯入自定義包,會出現如下的截圖–這裡我使用的是NGUI V3.6.8版本。

image

在其官方demo中,這個demo給我留下了非常酷的印象(右上角NGUI的logo,好像電影中維京人的帽子?):

image

NGUI程式碼的樣例,極為豐富,反覆臨摹,可學很多東西,這裡就不一一列舉了,僅對學習進行小結。

image

  • UI Root

NGUI的UI Root類似UGUI Canvas.Screen.Camera模型;UI Root是所有NGUI控制元件的根元素。

image

建立一個NGUI元素後,在UI Root下自動帶一個Camera。

另外,NGUI是第三方的,故無法像UGUI一樣在Hierarchy中通過快捷鍵新增UI元素:

image

可通過主選單–NGUI新增元件

image

還可以在Scene中,通過右鍵選單新增UI元件(右鍵選單提供了新增指令碼、Help跳轉到官網tasharen的Tip功能,很棒。)

image

  • 原生的UI元件有2個:

常使用的UI元件有2個:Lable & Sprite,其他元件是組合這2個UI元件實現的。

image

更多的常用控制元件,是通過Prefab Tool提供的,如Button、Slider、CheckBox等。

image

在此基礎上,你也可以自定義你的UI控制元件,儲存為Prefab即可,然後拖入到NGUI的Prefab Toolbar中儲存起來。

  • 互動

    NGUI中實現控制元件的互動有2個步驟,主要是用碰撞檢測(Trigger)和指令碼實現,使用起來方便的很—成熟、好用。

1 新增Box Collider
2 新增事件指令碼( *.cs)實現

NGUI預設提供了豐富了UI指令碼,幾乎囊括了能用到的所有指令碼—可在此基礎上,繼續通過擴充套件程式碼完成您的需求。

image

  • 動畫

類似互動功能,動畫也是通過指令碼元件實現的。 NGUI自帶的Tween 有10個指令碼

clip_image001

  • Dock:Anchors

image

製作複雜UI佈局的時候,Anchors就顯得尤為關鍵,故NGUI也提供了非常方便的Anchors功能—預設不開啟,通過選擇Type=Unifed可開啟Anchors功能,設定Target物件,同時設定Left、Right、Right、Bottom、Top即可實現,相對比較方便。(預設的Target物件是該UI的父物件)

  • 圖集(Atlas Maker):圖片的批量壓縮,提高效能。

Atlas 這個單詞很詭異,以前沒有見過,搜尋了一下bing,發現很有趣:

image

使用Atlas Maker,主要目的是對批量圖片進行壓縮,成為一張圖片,使用的時候通過offset可獲得指定的圖片。這個技術在GIS載入圖片、Web載入圖片中曾經用過。

Atlas Maker經過處理多個選擇的圖片後,最後產生了3個檔案:

  • MyAtlas.png

  • MyAtlas.prefab

  • MyAtlas.mat

其他tip:

獲取NGUI當前控制元件的設定值:volumn = UIProgressBar.current.value;

NGUI控制元件新增父子關鍵:NGUITools.AddChild(sprite.gameObject, item.gameObject);

NGUI一些不太好用的東西:

  • 多個Panel無法Move和對齊—panel沒有邊線,多個Panel不好控制。

clip_image001[4]

NGUI擺放元件,移動非常不爽:一個是Camera取消不了–Gizmos嘗試不行;另外移動和縮放很容易搞錯。

clip_image001[10]

  • NGUI的Sprite的切圖SlicedSprite九宮切圖,是通過設定數字修改的

clip_image001[6]

widget屬性,pivot,depth和size–NGUI的核心東東

clip_image001[8]

  • Pivot:中心點–對齊用

  • Depth:多個控制元件渲染的順序【數字越高,顯示優先順序越高; 使用起來有點坑–設定錯誤則顯示不了啦】

  • Size、Aspect:大小和放大

總結:

儘管我個人比較看好UGUI,要學就學新的,1年後UGUI就成熟了嘛! 但是為了看懂一些“參考程式碼”,NGUI也是有必要學習、學習的, 且NGUI有較豐富的第三方UI外掛生態圈呢,如NGUI HUB, TKTR等。

轉載於:https://my.oschina.net/xifarm/blog/384579