Unity界面插件NGUI核心組件說明

轉自:http://blog.1vr.cn/article.asp?id=605

UICamera-可以添加到任何相機,包含事件系統.

UICamera是每個UI的重要組成部分.它負責發送Camera中所有NGUI的活動.如果場景中僅有一個Camera,要確保它附有UICamera腳本.如果有多個相機,確保至少用來渲染UI的相機有UICamera腳本.當將這個腳本放在主相機上時,在遊戲場景中的所有都將有OnClick, OnHover, OnDrag等事件.



參數
Tooltip Delay:設定懸停與對象多少秒才執行OnTooltip事件.

如果使用Orthographic Projection相機,建議將相機的Size的尺寸設置爲當前分辨率高度的一半.比如針對iPad的屏幕1024*768分辨率,就設置Size爲384.另外一種方法是保持Size是1,縮放UI的Root爲該值的倒數,比如在iPad上獲得完美尺寸你需要設置Root的縮放到1/384或者0.002604167.第二種方法比較容易實行,不過物體在場景視圖中照比其他物體會比較小.

如果你仍舊不知道怎麼設置正交相機的尺寸,那麼嘗試看看下面這圖.



UIAtlas-定義精靈的紋理圖


UIAtlas是一個容器,它包含了一堆sprite的座標信息.如果你不熟悉這個概念.你可以這樣認爲:使用一張包含很多小貼圖的大貼圖比用若干張小貼圖更有效率.而大貼圖中的小的貼圖被稱作爲精靈(sprite),大紋理成爲圖集(atlas).

你使用NGUI之前都需要創建一個圖集(或使用現有的).可以從這裏瞭解圖集的做法.當然也可以直接使用UITexture,但它並不能應對所有問題.



Material:是描述繪製本圖集的材料.通常推薦用unlit着色器,比如用.Unlit – Transparent Colored爲NGUI.
TP Import:用於導入從TexturePacker導出的精靈.只需要拖拽輸出的Txt文件和所有精靈即可.
Coordinates:這允許你從基於像素的座標系切換爲基於UV的座標系.通常都是以像素座標系製作,但如果你需要重新調整紋理,則要先切換爲紋理座標.
New Sprite:允許已當前選擇的精靈爲範本創建新的精靈.
Delete:刪除所選精靈.
Sprite:可以通過下拉列表選擇所有正在使用的精靈.
Edit Name:重命名精靈的名稱.
Outer Rect:設置精靈的外邊框.
Inner Rect 設置精靈的內邊框,如果你不使用UISlicedSprite,可以跳過這個設置.
Padding:微調校正精靈的偏移量
Correction:基礎的校正精靈的座標使用完美整數像素.
Show:檢查精靈在圖集中的位置.

提示
可以將精靈組織成組創建多個圖集.只要圖集共享相同的材質,那麼控件仍舊會使用很少的DrawCall.
爲達到最佳效果,推薦將紋理的wrap模式設置爲"Clamp"和將格式設置爲"Truecolor".
將類似的紋理做成一個圖集是很好的方式,但是要儘量減少同時使用的圖集數量.
如果你是使用Texture Packer工具來創建圖集,要在輸出設置中選擇Unity3D.



如果你是用Photoshop創建圖集,你能通過選擇工具配合info panel面板來找出精靈的位置和尺寸.   



UIFont-字體圖集
UIFont可以設置UI所使用的字體數據和材質.可以使用免費的BMFont,或使用更專業的Glyph Designer.一般只做一次字體,保存爲一個預設,作爲新標籤所用的字體.參數:



Import Font:用於導入Glyph Designer.或BMFont輸出的FNT(改後綴爲TXT)數據.
UIAtlas:用來設置字體紋理所在的圖集,根據是否已選定UIAtlas,你會看到一下選項
    如果UIAtlas已指定,你可以選擇使用字體的精靈.
    如果沒有指定UIAtlas,你可以選擇用來繪製字體的材質.在NGUI中通常用"Unlit"類別下的着色器,如“Unlit – Transparent Colored".
    你可以調整字體在材質紋理內的像素矩形.
    快速校正完美像素座標,四捨五入到最近的像素值.
Spacing:可以調整字符之間的間距.
Show:檢查字體在紋理貼圖中的位置.

提示
爲達到最佳效果,推薦將紋理的wrap模式設置爲"Clamp"和將格式設置爲"Truecolor".
可以將多個字體合併爲一個圖集.這樣整個UI使用這些字體,仍舊會保持一個DrawCall.
你可以給字體增加斜角,陰影,描邊等效果,只要確保BMFont導出之前你設置好足夠的邊距和間距就可以了.

UISprite-從圖集中畫一個精靈

UISprite是第二個不常用的插件(第一個是UITexture),它唯一用途就是繪製地圖集的一部分.



參數
Transform:是很重要的一個組件,每個控件都可以通過Transform來進行位置和大小的調整.它也會影響到"Make Pixel-Perfect".你可以在它和UICamera之間任選一個來進行"完美像素"的調整.
UIAtlas:用來指定所使用的圖集.拖拽或者按下左側的按鈕選擇最近使用的圖集.
Sprite:選擇圖集中使用的精靈.選擇好精靈後.點擊一下"Make Pixel-Perfect"會自動爲你調整Transform的尺寸.
Depth是避免用Unity的Z排序(效率不好),而且如果你要旋轉UI窗口.單純的通過調整每個控件的Transform的Z軸來排序是不行的.所以要用這個深度來排序.
Color Tint:用來調整色調.
Make Pixel-Perfect:讓你快速調整控件的尺寸到實際像素尺寸.
Pivot:選擇部件的座標原點位置.
Preview:預覽精靈的紋理.

提示:
如果你看到兩個控件有閃爍,意味着你設置了同樣的Depth導致了重疊,你要調整不同的深度,讓它們不重疊.
不要把多個控件混在一起,否則會影響到完美像素這個功能.添加新控件時要注意保持創建新的子對象.
也可以在使用完美像素按鈕後再移動組合控件.



Label-用指定的字體繪製一個文本標籤

UILabel被用來顯示文字.支持多行,只需要用"\n"換行即可.允許用[RrGgBb]來建立彩色文字.



參數:
Transform:是很重要的一個組件,每個控件都可以通過Transform來進行位置和大小的調整.它也會影響到"Make Pixel-Perfect".你可以在它和UICamera之間任選一個來進行"完美像素"的調整.
UIFont:你可以選擇用於這個標籤的字體.你可以拖拽預設或者按下按鈕選擇最近使用的字體.
可以通過使用"\n"來決定標籤是多行還是單行,同樣可以用16進制顏色值來定義彩色文字,以[RrGgBb]開始,以[-]結束.如"Hello [FF0000]World[-]!",最後的結果是World是紅色的文字.
Line Width:用來指定文字行的最大寬度,如果是單行文本則切掉超出的.如多行文本則會根據寬度自動換行.
Multi-line:選擇該項後標籤達到最大寬度後會自動換行.
Password:勾選後字符將自動轉爲星號.
Encoding:勾選後會關閉特殊字符處理,一般用於輸入框.
Depth:改邊標籤控件的層級.
Color Tint:更改文本的主色調.
Make Pixel-Perfect: 讓你快速調整控件的尺寸到實際像素尺寸.
Pivot:選擇部件的座標原點位置.
Preview:預覽精靈的紋理.

提示:
如果你看到文本閃爍或看到被其他控件覆蓋了.那麼就要調整它的深度.
如果遇到複雜字符串(如斜體,標點,括號混合的)需要增加行寬度避免超寬.
用"\n"和顏色,僅一個標籤就可以做到下面的效果.



UIPanel-爲控件分組,用於管理和優化DrawCalls

UIPanel用來負責創建實際的幾何體.不必特別添加UIPanel,只要創建一個控件,它就會自動被添加.你可以創建多個Panel,用於多個菜單.



參數:
Normals:顯示法線,用來檢查UI正反是否正確.
Gizmos:用來顯示幾何體,可供選取用.
Debug:配合調試檢查場景視圖的幾何體,如果你開啓了這個.就應該取消掉上面Gizmos這個選項.
Widgets:會顯示有多少個控件在這個Panel上.
Draw Calls:可以看到用了多少個DrawCall,這個越低越好.
Clipping:可以選擇你要顯示的部分,默認是不進行裁切的.是利用着色器進行裁切的,如果開啓這個選項,NGUI將自動切換爲有裁切屬性的着色器.
    如果開啓裁切.你可以通過Center和Size來設置裁切盒.單位爲像素.
    如果選擇柔化邊緣裁切,將會有40像素的柔化邊緣供處理柔化效果.
Material:是隻讀的,可以看面板用了多少個材質.一個材質將佔用一個DrawCall.

提示:
默認情況下如果沒有UIPanel的話,會被最根的控件創建並作爲其父對象.而且最好讓你多個控件都用一個父對象,便於管理.
如果Panels下沒有控件.你可以放心的刪除這個面板.
如果你刪除一個存有控件的Panels,它和它下面的控件都會消失,但是當你播放時,所有控件又會重現,因爲又自動創建了一個欣的UIPanel.
當沒有變化時,幾何體不會重建,這意味着如果有個完全靜止的UI,不會沒幀都去更新幾何形狀,相反它也會被重用,提高性能.

    UIAnchor-能讓控件自動配合屏幕尺寸,填充滿屏和保持真實像素尺寸的UI.

UIAnchor有多種用途,其中包括在多種分辨率的屏幕的相對定位.
如果你將它放在2D UI的root上,它會自動進行完美像素處理.
如果將它用於一個對象,它將輔助對象在屏幕上的定位,比如側邊或者角落.
比如放在一個精靈上,可以用來將精靈自動填滿整個屏幕,比如做個背景.



參數:
HUD Camera是用來繪製該對象的相機,通常會自動選擇的.
Side:設置錨點,有4個邊,4個角和中心供選擇.
Half Pixel Offset:讓控件有半像素的位移以避免DirectX 9在Windows機器上的一個Bug.
Stretch To Fill:縮放填充,一般做背景時候會使用它.
Depth Offset:用於基於透視相機時調整計算點的深度.

提示:
如果對象有UIAnchor這個腳本,它自身的Transform將不接受你的修改,因爲它受控於這個腳本.如果你希望添加基於這個錨點的位移,你可以添加一個子對象.比如你希望有個控件始終在屏幕偏移(100,100)這個位置,你應該在層次面板做這樣的結構.UI->Anchor->Offset->Widget.
UIAnchor同樣可用於非正交相機.
如果UIOrthoCamera附加到相機,用UIAnchor創建的界面將固定尺寸和位置,無論你將屏幕尺寸改成多大.

Events-NGUI強大的事件系統
UIEvents-事件系統
你可以添加下面的方法腳本到控件或者帶有碰撞盒的遊戲對象,當然也可以賦予給相機,不過需要相機同時有UICamera腳本:
void OnHover (bool isOver):當鼠標移出或者懸停在某個碰撞器上的時候返回布爾值.在觸摸設備上不會有作用.
void OnPress (bool isDown):當鼠標或者觸摸到碰撞器發生布爾值返回.
void OnSelect (bool selected):當鼠標或者觸摸從OnPress發生後的釋放將會返回這個布爾值.
void OnClick():和OnSelect的產生條件相同,當點擊或觸摸碰撞器並且沒有發生拖拽時候觸發.
void OnDrag (Vector2 delta):當移動鼠標或者觸摸按下時候位移超過特定閥值時觸發.
void OnDrop (GameObject drag):當鼠標或觸摸釋放於從發生OnDrag的不同碰撞器傷觸發.傳遞的參數是產生OnDrag的遊戲對象.
void OnInput (string text):當一個OnSelect發生後在同一個碰撞器上觸發輸入.一般只有UIInput用它.
void OnTooltip (bool show):當鼠標懸停超過tooltipDelay時間後觸發該命令.觸摸設備上不會有作用.

可以用UICamera.lastCamera找到誰發出的事件,可用UICamera.lastHit得到誰接受這個事件,以及用UICamera.lastTouchPosition得到觸摸或屏幕的位置

下面的腳本賦予一個碰撞器時,點擊這個碰撞器會輸出HelloWorld.



原文:http://www.tasharen.com/?page_id=197
由威阿翻譯,轉載請註明來自1Vr.Cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章