unity3D遊戲開發十五之NGUI二

來源:互聯網
上載者:User

接下來我們講解下UILabel,UILabel是用來顯示文本的指令碼,繼承自UIWidget。我們建立一個label,屬性如:


所有的label都需要Font才可正常工作。這個字型可以使Dynamic的(引用Unity Font),也可以是Bitmap字型——嵌入到Atlas裡面的字型。動態字型更穩固因為它不需要你預先建立符號,但是Bitmap字型可以和你atlas的其他東西渲染在同一個draw call上並且這些字型可以通過photoshop美化。

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

使用Dynamic字型的時候,你可以設定label的Font Size和style。你也可以設定一個material用來渲染。

接下來的大框——你可能猜到了——用來輸入文本。預設是多行文本輸入,除非通過下面的Max Lines屬性限制。

Overflow操作讓你決定lable的文本超過允許的空間之後的處理方法。


  • Shrink Content 內容自動縮放。與Keep Crisp設定一起來控制Dynamic字型,使字型的字型大小變小而不是簡單的縮放。這樣不管label是否被縮放都能保持清晰。
  • Clamp Content 剔除多餘的文本。
  • Resize Freely 根據輸入的常值內容自動調整dimension。不需要手動調整。
  • Resize Height 保持寬度不變,必要時增加高度。
Spacing屬性控制字元間距。正負皆可。像素為單位。

前面提到的Max Lines用來控制最多要多少行。用0表示不限制。

關掉Encoding表示不需要顏色和表情標籤。預設啟用。

可以給label提供漸層通過Gradient的bottom和top顏色。如:


文本可以有shadow或者outlineEffect。shadow會使用兩倍的geometry,outline會使用五倍——所以要小心這個屬性。Distance參數控制shadow或者outline與原文本的距離,以像素為單位。


接下來我們講解UISprite,UISprite是NGUI裡面最實用的。使用atlas紋理的一部份用來繪製sprite,繼承UIWidget的所有功能,屬性如:


  • sprite首先需要一個Atlas。點擊Atals按鈕會列出當前項目中已有的atlas。建立新的atlas要通過Atlas Maker工具(NGUI -> Open -> Atlas Maker)。
  • 你可以點擊Sprite選擇按鈕旁邊的Edit按鈕來編輯選擇的sprite。這裡允許給sprite增加用來調整9-sliced的邊界。
  • 預設情況下,新加的sprite會是Simple類型。意味著他們和UITextures的顯示效果差不多,除了他們是來自atlas。
  • Sprite Type為Filled,這樣可以做一個類似冷卻的進度條。
  • Sprite Type為Tiled,這樣你的sprite會重複的填充一塊地區。盡量不要用太小的sprite因為這樣會建立很多的三角形。給你的sprite一個1像素的border也是個好主意,這一個像素會被排除掉(所有tiled的圖的邊緣看起來就銜接起來一樣)。
  • Sprite Type為Sliced就可以建立一個9-slicing的sprite。只有指定了Border後它才會真正起作用。(點擊上面提到的Edit按鈕)。sliced sprite的一個應用就是做按鈕的背景。
使用”Make Pixel-Perfect“選項(新版本是Snap)來讓UISprite 使用它的原始大小。就是如果你的原始texture是300*200的像素,UISprite的dimensions對應的width和height就會調整到這個數值。 注意這個對Tiled和Sliced sprite沒有效果——它們有自己的規則。

接下來我們瞭解下UIButton,Button是一個非常簡單的組件,有以下功能:接收hover、pressed、click事件,修改指定的sprite顏色。Image Button組件可以和Button同時加到一個game object上,Image Button用來切換sprite。 我們建立一個Button,它主要包含一個background的Sprite和一個label,如:


屬性如:


我們在Background這個sprite中指定一個紋理圖片,然後修改Widget中Color的顏色,然後修改Label的文字內容,顏色等,如:


我們來看看button的監聽事件,第一種方法是:我們建立一個指令碼,代碼如下:

void OnClick(){Debug.Log("------test");}
然後直接綁定到button上,當我們點擊的時候,會列印出log的內容

第二種方法是使用SendMessage,選擇按鈕後,在Unity導覽功能表欄中選擇Component->Interaction->Button Message 組件

Target:接收按鈕訊息的遊戲對象

Function Name:接收按鈕訊息的方法,擁有這個方法的指令碼必須綁定在上面Target對象身上

Trigger:觸發的事件,OnClick顯然是一次點擊

Include Children :是否讓該對象的所有子物件也發送這個點擊事件

設定一個Null 物件,將所有的訊息寫在一個指令碼中,賦值給Null 物件,給控制項添加UIButton Message組件,將Null 物件拉入組件的Target,選擇相應的Function Name(比如OnClick函數)即可。對於多個按鈕來說,只需添加UIButton Message組件,選擇相應的函數即可實現,如:


第三種方法是使用UIListener,這個也是推薦大家使用的一種方法,選擇按鈕後在Unity導覽功能表欄中選擇Component->NGUI->Internal ->Event Listener 。 掛在按鈕上就可以,它沒有任何參數,如:


我們修改Test指令碼代碼,如下:

void Awake (){Debug.Log("----111");//擷取需要監聽的按鈕對象GameObject button=GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/Button");//設定這個按鈕的監聽,指向本類的ButtonClick方法中UIEventListener.Get(button).onClick=buttonClick;}// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}void buttonClick(GameObject button){Debug.Log("GameObject:"+button.name);}

然後直接綁定到button上,當我們點擊的時候,會列印出log的內容

接下來我們瞭解下UIInput,一個輸入框,就像textfield一樣,它的結構也像button一樣,一個backgroud和一個label,如:
我們看下它的屬性,如:
Label:文本顯示在哪個UILabel裡

Starting Value:輸入框開始顯示的字

Saved As:儲存輸入內容到prefabs中

Active TextColor:啟用文字框後顯示顏色

Inactive Color:預設狀態顏色

Caret Color:插入字元狀態顏色

Selection Color:選擇狀態中字元的顏色

Input Type:輸入類型(standard)標準的,(AutoCorrect)自動修正,(Password)密碼

Validation:輸入類型限制

Character Limit:輸入字元數限制

On Submit:輸入完後進行事件分發

我們建立一個input,如:




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.