????????NGUI作為Unity的一個UI工具螟凭,從Unity開始時就跟著迭代發(fā)展虚青。到現(xiàn)在,最新版本已經(jīng)是NGUI Next Gen UI v3.12.1螺男。再Unity自身的UI工具也就是UGUI還沒有的時候棒厘,NGUI可以說是Unity程序必會的一個插件。就算是UGUI出現(xiàn)烟号,也不能掩蓋NGUI的光芒绊谭,而且眾所周知,NGUI的作者還是UGUI的開發(fā)者之一汪拥。
? ? ? ? 這篇文章只是對NGUI做一個整體的介紹达传,至于詳細(xì)的深入將在之后的文章中進(jìn)行。
? ? ? ? NGUI主要分為四個部分迫筑。一個UI宪赶,一個動畫(Tween),一個交互方面的代碼比如UIGrid脯燃、UITable搂妻、UIScrollView之類,還有一個就是核心代碼模塊也就是底層支持辕棚。這四個部分就是我們主要要研究的方向欲主。其他如shader、editor代碼則是沒有太大關(guān)聯(lián)逝嚎。
?當(dāng)你在Unity中創(chuàng)建第一個UISprite或者其他物體時扁瓢,你就會發(fā)現(xiàn),你創(chuàng)建的不僅僅是一張UISprite补君。它還包括uiRoot跟一個camera引几,這只在第一次的時候創(chuàng)建,而我們創(chuàng)建的Sprite就在uiroot下面挽铁。NGUI的所有面板都是以Panel作為分割伟桅。這是因為NGUI自身的機(jī)制所需敞掘。 因此UIRoot本身便附加了一個UIPanel組件。
? ? ????UI方面來說楣铁,NGUI主要提供了UIRoot, UIRect, UISprite玖雁,UILabel,UIAtlas, UIFont, UILocalize, UITextList, UITexture等等
?UI方面來說民褂,最主要的應(yīng)該就是圖片的顯示了疯潭。NGUI提供了UIAtlas作為游戲內(nèi)精靈圖片(UISprite)的主要提供者竖哩。一個圖集的描述文本(即圖中的TP Import),UIAtlas提供一個材質(zhì),材質(zhì)需要一個貼圖,這張貼圖包含我們所需要的一些同一類型的哭当,或者同一頁面的圖素。貼圖盡量使用2的n次方的分辨率大小,這樣運(yùn)行效率更高。其一是壓縮過后包體會比不是2的n次方的小,其二是加載也更快偿渡。不是2的n次方的圖片质帅,unity會將其轉(zhuǎn)化為一個非壓縮RGBA32位的格式。
? ? ? ? NGUI作為Unity最常用的UI編輯工具。提供了很多基本的功能。其中最基礎(chǔ)的就是Sprite精靈圖片驼仪。那么NGUI的精靈圖片在哪里呢。就在這Atlas的這張貼圖里面驻仅,這張集合了所有我們分類并打包好的圖片谅畅,我們稱之為“圖集”。而它的切割信息則保存在對應(yīng)的.txt文檔中噪服。大概是下面這張圖里面的效果毡泻。里面保存這整張圖集里面每個單獨的圖片的id、高寬以及偏移量粘优。UIAtlas正是根據(jù)這些信息提取對應(yīng)的精靈圖片仇味。
? ? ? ?NGUI的文本顯示主要靠UILabel這個組件,而文字的話雹顺,依靠的時UIFont這個組件丹墨。顯示文字只需要簡單的在UIlabel的輸入框輸入文本即可。UIlabel本身支持改變顏色等行為嬉愧,順帶提一嘴贩挣,修改文字的方式有兩種,其一為直接改顏色,其二為使用bbcode王财。直接修改顏色的話卵迂,只需要在UILabel的Inspector面板中點擊顏色然后選擇需要的顏色值即可。bbcode則需要查詢對應(yīng)顏色的顏色代碼進(jìn)行賦值绒净。
? ? ? ? 如果只是做國內(nèi)游戲的話见咒,當(dāng)然使用中文就夠了。但是現(xiàn)在的游戲一般都有海外版挂疆。因此多語言的控制就非常的重要改览。NGUI提供了一個名為UILocalize的腳本控制,不過不是很常用缤言,一般都是公司自己寫的多語言工具宝当。從初始化多語言到保存到賦值都有自己的一整套完整的流程。
UITween
UITween的使用非常的簡單墨闲,都是大同小異今妄。NGUI包含的動畫分別為:
TweenHeight 做UISprite等這些有明確邊框的物體的height屬性做動畫。提供目標(biāo)物體鸳碧,最終高度跟動畫時間即可
TweenPosition,這個則是位移動畫犬性。提供目標(biāo)物體和最終的目的坐標(biāo)跟動畫時間
TweenRotation瞻离,旋轉(zhuǎn)動畫,提供目標(biāo)的軸向乒裆、目標(biāo)值以及動畫時間套利。這個需要注意的是萬向鎖問題,不然很難達(dá)到自己要的效果鹤耍。
TweenAlpha肉迫,這個是做Alpha動畫的,同樣是提供目標(biāo)物體稿黄,最終alpha跟時間
TweenScale喊衫, 這個是做縮放動畫,同樣是提供目標(biāo)物體杆怕,最終的scale值跟動畫時間族购。
其他動畫都是差不多,只需要提供目標(biāo)物體陵珍,提供正確的值跟時間即可寝杖。需要主要的是,這些動畫在物體未激活的情況下是不會運(yùn)行的互纯。所以如果需要的話瑟幕,需要正確的停止跟開啟,否則會容易出現(xiàn)再次打開頁面動畫卻從中間開始播放之類的問題。
Internal
Internal中包含了許多的擴(kuò)展的不屬于UI的東西只盹。比如事件的響應(yīng)腳本EventTrigger亿卤,如果需要響應(yīng)按鈕點擊時間什么的,都可以掛載這個組件鹿霸,這個組件上面明確了單擊排吴、雙擊、拖拽等事件的響應(yīng)事件懦鼠,我們只需要綁定我們的ui钻哩,就可以正常的使用。
? ? ? ? UIDragCall 是NGUI非常終于的一個組件肛冶,整個UI的渲染都是靠它街氢,作用不言而喻。uidrawcall的數(shù)量跟性能是成反比的睦袖。也就是drawcall越多珊肃,性能越差。而uidrawcall的生成在uipanel中馅笙,里面粗暴的根據(jù)sprite的depth進(jìn)行生成伦乔。因此我們在創(chuàng)作UI界面的時候需要格外注意,盡量控制同一個圖集的sprite的depth是相連的董习,這樣就會將其分配到同一個drawcall中烈和。當(dāng)然,有時候故意分開皿淋,然后夾雜一些特效什么的也是有這種操作的招刹。
? ? ? ? UIRect是NGUI所有顯示的組件的基類,可見其重要性窝趣。UIWidget是UIRect的一個子類疯暑。它只是一個簡單的透明矩形,有時候需要透明的但是可以點擊的地方就可以用到它哑舒。而且作為一個父節(jié)點妇拯,可以很方便的控制自己及以下的物體的整體透明度,配合TweenAlpha簡直不要太好用散址。
? ? ? ? SpringPanel是作為一個緩沖移動的腳本乖阵。它類似與TweenPosition,但是不同之處在于预麸,它是配合其他組件瞪浸,比如UIScrollView、UIWrapContent使用的吏祸,它可以將一個物體緩慢的移動到目標(biāo)位置对蒲。
Interaction
? ? ? ? 這個文件夾中包含的腳本都是需要跟其他組件共同配合使用的钩蚊。比如使用UIScrollView的時候,就需要Panel來控制是否切割蹈矮,移動事件的響應(yīng)砰逻,UITable或者UIGrid的排序,或者UIWrapContent的回收等等泛鸟。這個文件夾中的組件各種搭配方式能組合出許多不同的卻又很好用的功能蝠咆。例如我們需要做一個背包,那么背包的滑動就需要UIScrollView跟UIDragObject北滥, 那么排序就需要用到UITable或者UIGrid刚操。
第一次寫,內(nèi)容比較亂再芋,見諒個~菊霜。接下來會開始仔細(xì)介紹各個常用組件的使用,夾雜一些例子