NGUI研究之Sprite精靈與精靈動畫的使用,nguisprite
學習了幾天Unity3D強大的NGUI外掛程式,覺得NGUI中最大的亮點之一就是Sprite精靈。我們先說說精靈是什麼東西?它可以在一張大圖中去截取一部分(大圖就是整體映像集合,而截取的小圖就是一個精靈),然後起一個精靈的名稱,使用時通過精靈的名稱就能直接繪製,並且精靈還可以播放動畫。總之真的非常強大。本節我們學習如何建立自己的精靈檔案。基本使用不瞭解的看NGUI研究之開始學習製作第一個例子
首先我們在Project中建立一個Prefab對象,預設給它Transform變換屬性,暫時我們給Prefab對象起名為MySprite。接著給Prefab掛像集合組件。在Unity導覽功能表欄中選擇Component->NGUI->UI->Atlas(映像集合)即可。
常用的屬性介紹:
Coordinates :UI座標單位,用預設Pixels(像素)就行。
Pixel Size:像素的長度單位1。
Add/Delete:添加與刪除精靈。
first就是當前精靈的名稱,如果已添加了多個精靈都會出現在Sprite下拉式清單中。再往下就是設定該精靈在大圖的顯示地區以及座標,中我們可看到已經在整個大圖中框選了一個地區,就是綠色的矩形,矩形中就是當前精靈中的內容。
下面我們將這張圖片分為4塊完全相等的精靈,接著我們學習在代碼中如何控制這些精靈的繪製以及排序。建立指令碼Test.cs並且將它掛在剛剛建立的精靈對象身上。
Test.cs
using UnityEngine;using System.Collections;using System.Collections.Generic;public class Test : MonoBehaviour {void Start(){//得到精靈組件指令碼UISprite ui = gameObject.GetComponent<UISprite>();//得到映像集合中精靈的數量Debug.Log("精靈的數量" + ui.atlas.spriteList.Count);//得到映像集合數組中對應角標精靈對象的名稱string name = ui.atlas.spriteList[2].name;//設定顯示精靈的名稱ui.spriteName = name;//設定精靈的深度,數值越大繪製的越靠前ui.depth = 2;}}
| 12345678910111213141516171819202122232425 |
usingUnityEngine;using System.Collections;usingSystem.Collections.Generic; publicclass Test: MonoBehaviour{ voidStart() { //得到精靈組件指令碼 UISpriteui =gameObject.GetComponent<UISprite>(); //得到映像集合中精靈的數量 Debug.Log("精靈的數量"+ ui.atlas.spriteList.Count); //得到映像集合數組中對應角標精靈對象的名稱 stringname =ui.atlas.spriteList[2].name; //設定顯示精靈的名稱 ui.spriteName= name; //設定精靈的深度,數值越大繪製的越靠前 ui.depth= 2; }} |
如所示,精靈已經在代碼中動態修改完畢,並且設定了它的深度讓它靠前顯示。如果想修改它的X、Y位置,直接修改Transform即可。Z軸的話修改它的深度就行,不用修改Z軸座標。
下面我們再來學習一下精靈動畫,NGUI已經幫我們封裝了專門播放精靈動畫的類UISpriteAnimation 專門處理精靈動畫。MOMO在網上隨便找了一組2D主角的行走動畫,按照上面介紹的方法將整個圖片匯入工程中。如所示,這組人物的行走動畫我們選區取左移動的4幀。
這裡我在強調一下,需要修改修改材質的著色器,讓他支援背景透明,對當前材質的著色器我們選擇Unlit/TransparentColored。
接著在Hierarchy視圖中選擇Sprite(NGUI)(剛剛建立的精靈對象),然後在Unity導覽功能表欄中選擇Component->NGUI->UI->Sprite Animation(幀動畫)組件即可。此時直接運行遊戲我們就會發現主角已經按照剛剛裁剪的精靈順序動了起來,這還沒有完,我們下面學習在代碼中如何動態控制精靈。
本例我們的目的是使用NGUI在螢幕中建立一個按鈕,第一次點擊按鈕主角播允許存取走動畫,再次點擊按鈕主角動畫將停止。上篇文章中我們已經學習了NGUI中按鈕的相應事件,如果想在別的對象或者指令碼中監聽某個按鈕的點擊事件那麼就可以使用傳遞訊息的方式。NGUI幫我們封裝了一次傳遞訊息的類,Unity導覽功能表欄中選擇NGUI-》Interaction->ButtonMessage。它的原理也是使用Unity的sendMessage,有興趣的朋友可以去看看。接著說正題,建立指令碼Test.cs掛在剛剛建立的按鈕上。
Test.cs
using UnityEngine;using System.Collections;using System.Collections.Generic;public class Test : MonoBehaviour {//播放動畫與不播放bool isPlayAnim = false;//得到精靈對象GameObject animObj = null;void Start(){//得到精靈對象animObj = GameObject.Find("Sprite");}void OnClick () {if(isPlayAnim){//停止動畫isPlayAnim = false;//銷毀UISpriteAnimation組件Destroy(animObj.GetComponent<UISpriteAnimation>());//動畫停止後設定精靈預設的幀UISprite ui = animObj.GetComponent<UISprite>();string name = ui.atlas.spriteList[0].name;ui.spriteName = name;}else{//播放播放isPlayAnim = true;//加入播放動畫組件animObj.AddComponent("UISpriteAnimation");//設定播放動畫的速度//1-60之間數值越大播放速度越快UISpriteAnimation uiAnim = animObj.GetComponent<UISpriteAnimation>();uiAnim.framesPerSecond = 10;} }}
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
usingUnityEngine;using System.Collections;usingSystem.Collections.Generic; publicclass Test: MonoBehaviour{ //播放動畫與不播放 boolisPlayAnim =false; //得到精靈對象 GameObject animObj= null; voidStart() { //得到精靈對象 animObj= GameObject.Find("Sprite"); } voidOnClick () { if(isPlayAnim) { //停止動畫 isPlayAnim= false; //銷毀UISpriteAnimation組件 Destroy(animObj.GetComponent<UISpriteAnimation>()); //動畫停止後設定精靈預設的幀 UISpriteui =animObj.GetComponent<UISprite>(); stringname =ui.atlas.spriteList[0].name; ui.spriteName= name; } else { //播放播放 isPlayAnim= true; //加入播放動畫組件 animObj.AddComponent("UISpriteAnimation"); //設定播放動畫的速度 //1-60之間數值越大播放速度越快 UISpriteAnimationuiAnim =animObj.GetComponent<UISpriteAnimation>(); uiAnim.framesPerSecond= 10; } } } |
如所示,運行遊戲點擊按鈕。主角開始邁著大步開始行走了,再次點擊主角將停止播允許存取走動畫。謔謔。最後祝大家學習愉快啦啦啦!!
怎用代碼控制NGUI中Sprite的圖片?
同一個atlas裡通過spriteName設定圖片UISprite sprite = gameObject.GetComponent();sprite.spriteName = "XXX";
問Unity3d,怎用代碼控制NGUI控制項,如Button、Lable、SlicedSprite等
很簡單的啊
public UILabel text;
聲明,然後指令碼給一個物體,直接把label拖上去,然後引用的 時候直接使用text.text = "中文";
這是label。
至於button你想問的是按鈕的事件嗎?
添加指令碼buttonmessage,然後把寫有事件的指令碼拖給target,下面的function name填你的方法名