Unity3d NGUI控件知識

 

 

參考:http://forum.exceedu.com/forum/forum.php?mod=viewthread&tid=33091&extra=page%3D1php

1、Panelweb

一、Alpha屬性影響全部在panel下面的widget。因此能夠用它來淡出整個窗口ide

二、若是你的UI須要被燈光影響,須要勾選上Normals。性能

三、沒有panel全部東西都不可以被渲染出來。若是你對Unity熟悉,你能夠把UIPanel當作Renderer學習

四、Panel會根據dimensions自動Clip全部它的子節點。使用這個功能須要選擇Clipping下拉列表中的任意選項,以後調整Scene View中紫色矩形的尺寸,就像調整widget的尺寸同樣。經過這樣作你能夠把一個panel放到Scroll View中,讓他輕鬆的拖拽。字體

 五、一個動力學Rigidbody會自動增長到你的panel上,由於對於Unity來講這樣會提高性能。移動靜態的collider會有不少消耗性能的操做,可是移動rigidbody就不會。spa

 

2、Cameracode

一、UICamera真正作的事情是發送NGUI事件給全部被當前camera渲染的object,camera是UICamera腳本所在的那個。 其實這個腳本作的事情和UI無關。事實上若是你想讓遊戲裏面的object接收OnPress、OnClick、OnDrag等這類事件,你須要把UICamera掛在你的主相機上orm

二、UICamera的選項Event Type用來決定腳本如何排序mouse或者touch觸發的事件。若是是UI模式,這些事件順序基於widget的depth——和渲染順序同樣。若是UICamera掛到了Main Camera上,那麼就須要把這個選項修改爲World模式。這樣就會根據與相機的距離來排序點擊到的object。對象

三、Event Mask用來決定哪些層會接收事件。大多數狀況下你須要的就是「Everything」,這個值會與UnityEngine.Camera's Culling Mask進行邏輯與運算,有須要的話你能夠微調這個值。若是你修改了UI的game object的Layer,記得調整Event Mask,不然你可能會發現UI不響應事件。

四、Allow Multi-Touch選項用來控制是否支持多點觸碰。若是勾選掉,多點觸碰也會當作單點觸碰。

 

小貼士

UICamera發送如下事件給collider:

  • OnHover (isOver) 發送時機爲鼠標懸停(只觸發一次)或者離開collider。
  • OnPress (isDown) 發送時機爲鼠標在collider上按下。
  • OnSelect (selected)發送時機爲鼠標點擊和鬆開的時候都在同一個object上。
  • OnClick ()發送時機和OnSelect同樣,可是要求鼠標沒有移動特別多。UICamera.currentTouchID表示按下的鼠標哪一個鍵。
  • OnDoubleClick ()發送時機爲當在四分之一秒內click兩次的時候。UICamera.currentTouchID表示按下的鼠標哪一個鍵。
  • OnDragStart ()發送時機爲OnDrag()事件以前。
  • OnDrag (delta) 發送時機爲一個object被拖拽。
  • OnDragOver (draggedObject)發送時機爲其餘的object拖拽到他的上面。
  • OnDragOut (draggedObject)發送時機爲其餘的object拖拽出他的上面。
  • OnDragEnd ()發送時機爲drag事件結束。發送給被拖拽的object。
  • OnInput (text)發送時機爲輸入的時候(在點擊選擇了一個collider以後)。
  • OnTooltip (show) 發送時機爲鼠標懸停在一個collider上一段時間沒有移動。
  • OnScroll (float delta)發送時機爲鼠標滾輪滾動。
  • OnKey (KeyCode key)發送時機爲鍵盤或者輸入控制器被使用的時候。

 

3、UIGrid

一、Arrangement的值決定了子節點的擺放位置。Horizonta讓子節點向右排列,Vertical向下排列。

二、Max Per Line屬性控制Horizontal排列時候的最大有多少列, Vertical排列的時候最大有多少行。

三、Cell Width和Height決定了全部條目的間隔。

 

4、UILabel

一、修改Pivot來改變label的對齊方式。Top-left、Left和Bottom-left是左對齊。Top、Center或者Bottom是中間對齊。Top-right、Right、Bottom-right是右對齊。

二、Overflow操做讓你決定lable的文本超過容許的空間以後的處理方法。

 

  • Shrink Content 內容自動縮放。與Keep Crisp設置一塊兒來控制Dynamic字體,使字體的字號變小而不是簡單的縮放。這樣無論label是否被縮放都能保持清晰。
  • Clamp Content 剔除多餘的文本。
  • Resize Freely 根據輸入的文本內容自動調整dimension。不須要手動調整。
  • Resize Height 保持寬度不變,必要時增長高度。

三、文本能夠有shadow或者outlineEffect。shadow會使用兩倍的geometry,outline會使用五倍——因此要當心這個屬性。Distance參數控制shadow或者outline與原文本的距離,以像素爲單位。

四、運行時修改文本,你能夠經過如下方法:

UILabel lbl = GetComponent<UILabel>(); 

lbl.text = "Hello world!";
 
 
注意事項
1.UILabel彩色字標籤失靈
A:有時候會發現UILabel的[ffffff][-]這樣的色彩標籤忽然不起做用了,那你要檢查一下是否是Widget的Color設置了顏色,改爲白色就正常了!

2.Encoding屬性不見了

A:是的,新版本中Encoding屬性取消了,取而代之的是BBcode!

 

5、Button

一、Button組件能夠掛在任何有collider的game object上。不須要必定掛在widget上。

二、渲染掛着Button組件物體的攝像機,須要有UICamera組件,這樣Button的各類事件才能生效,由於全部事件是由UICamera發出的

三、Button接收鼠標hover、press和click事件,而後修改Target屬性的顏色。Target一般是widget(sprite、label或者texture),可是也能夠是有Light組件的物體,或者是Renderer。

 

小貼士

一般把Button組件放在按鈕的背景sprite上。快捷鍵ALT+SHIFT+C快速添加collider,以後勾選sprite的」Box Collider「選項,這樣box collider就能夠自動縮放到和sprite大小同樣。

 

6、UISprite

一、Sprite TypeFilled,這樣能夠作一個相似冷卻的進度條。

二、Sprite TypeTiled,這樣你的sprite會重複的填充一塊區域。儘可能不要用過小的sprite由於這樣會建立不少的三角形。給你的sprite一個1像素的border也是個好主意,這一個像素會被排除掉(全部tiled的圖的邊緣看起來就銜接起來同樣)。

3Sprite TypeSliced就能夠建立一個9-slicing的sprite。只有指定了Border後它纔會真正起做用。(點擊上面提到的Edit按鈕)。sliced sprite的一個應用就是作按鈕的背景。

四、使用」Make Pixel-Perfect「選項(新版本是Snap)來讓UISprite 使用它的原始尺寸。就是若是你的原始texture是300*200的像素,UISprite的dimensions對應的width和height就會調整到這個數值。 注意這個對Tiled和Sliced sprite沒有效果——它們有本身的規則。

五、Tiled Sprite會自動平鋪到整個精靈的大小內,適合使用無縫貼圖製做背景。

六、Sliced Sprite填充完整個的Sprite區域,固定大小,不會隨圖片大小而改變。(有人說這個適合用來做角色的頭像顯示)

 

 

小結

 

原創文章如需轉載請註明:轉載自 脫莫柔Unity3D學習之旅

 

UIEvents-事件系統
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獲得觸摸或屏幕的位置

相關文章
相關標籤/搜索