NGUI基礎之button(按鈕)

1,button的創建;2,button組件的基本屬性;3,button的事件監聽

原位地址:http://blog.csdn.net/dingkun520wy/article/details/50434520


1,button的創建

編輯器創建

代碼創建

/// <summary>
    /// 動態加載一個NGUI按鈕
    /// </summary>
    /// <param name="panleMe">父節點對象</param>
    /// <param name="atlas">用到的圖集</param>
    /// <param name="sriteName">圖片的名字</param>
    private void CreateServerButton(GameObject panleMe, UIAtlas atlas, string sriteName)
    {
        //獲得深度(要創建button的Panle的深度)
        int depth = NGUITools.CalculateNextDepth(panleMe);
        //創建button物體,命名、設tag、擺所在panle的相對位置。
        GameObject go = NGUITools.AddChild(panleMe);
        //添加button的背景圖片UISprite
        UISprite bg = NGUITools.AddWidget<UISprite>(go);
        bg.type = UISprite.Type.Sliced;
        bg.depth = depth;
        //背景圖片使用的圖集
        bg.atlas = atlas;
        //圖集中使用的精靈名字
        bg.spriteName = sriteName;
        //跳轉位置(必要)
        bg.MakePixelPerfect();
        
        //添加碰撞(有碰撞才能接收鼠標/觸摸),大小與Button背景一致
        BoxCollider box = NGUITools.AddWidgetCollider(go);
        box.center = new Vector3(0, 0, -1);
        box.size = new Vector3(bg.localSize.x, bg.localSize.y, 0);

        //添加UIButton觸發事件的必要組件,並關聯之前生成的UISprite
        UIButton bt = go.AddComponent<UIButton>();
        bt.tweenTarget = bg.gameObject;

    }


2,button組件的基本屬性

按鈕用到的UISprite

按鈕的響應範圍

UIButton的屬性


3,button的事件監聽

直接監聽事件

把下面腳本直接綁定在按鈕上,當按鈕點擊時就可以監聽到,這種方法不太好很不靈活。

void OnClick()
{
 Debug.Log("Button is Click!!!");
}

使用SendMessage

選擇按鈕後,在Unity導航菜單欄中選擇Component->Interaction->Button Message 組件。

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

Function Name:接收按鈕消息的方法,擁有這個方法的腳本必須綁定在上面Target對象身上。

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

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


使用UIListener

這個也是推薦大家使用的一種方法,選擇按鈕後在Unity導航菜單欄中選擇Component->NGUI->Internal ->Event Listener 。 掛在按鈕上就可以,它沒有任何參數。。

在任何一個腳本或者類中即可得到按鈕的點擊事件、把如下代碼放在任意類中或者腳本中。

void Awake()
{
                //獲取需要監聽的按鈕對象
GameObject button= GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
                //設置這個按鈕的監聽,指向本類的ButtonClick方法中。
UIEventListener.Get(button).onClick= ButtonClick;
}
 
        //計算按鈕的點擊事件
void ButtonClick(GameObjectbutton)
{
Debug.Log("GameObject "+ button.name);
 
}

更多操作類型

publicclass UIEventListener: MonoBehaviour
{
publicdelegate voidVoidDelegate (GameObjectgo);
publicdelegate voidBoolDelegate (GameObjectgo,bool state);
publicdelegate voidFloatDelegate (GameObject go,float delta);
publicdelegate voidVectorDelegate (GameObject go,Vector2 delta);
publicdelegate voidStringDelegate (GameObject go,string text);
publicdelegate voidObjectDelegate (GameObject go,GameObject draggedObject);
publicdelegate voidKeyCodeDelegate (GameObject go,KeyCode key);
 
publicobject parameter;
 
publicVoidDelegate onSubmit;
publicVoidDelegate onClick;
publicVoidDelegate onDoubleClick;
publicBoolDelegate onHover;
publicBoolDelegate onPress;
publicBoolDelegate onSelect;
publicFloatDelegate onScroll;
publicVectorDelegate onDrag;
publicObjectDelegate onDrop;
publicStringDelegate onInput;
publicKeyCodeDelegate onKey;
 
voidOnSubmit (){ if(onSubmit!= null)onSubmit(gameObject);}
voidOnClick (){ if(onClick!= null)onClick(gameObject);}
voidOnDoubleClick (){ if(onDoubleClick!= null)onDoubleClick(gameObject);}
voidOnHover (boolisOver){ if(onHover!= null)onHover(gameObject,isOver);}
voidOnPress (boolisPressed){ if(onPress!= null)onPress(gameObject,isPressed);}
voidOnSelect (boolselected){ if(onSelect!= null)onSelect(gameObject,selected);}
voidOnScroll (floatdelta){ if(onScroll!= null)onScroll(gameObject,delta);}
voidOnDrag (Vector2delta){ if(onDrag!= null)onDrag(gameObject,delta);}
voidOnDrop (GameObjectgo){ if(onDrop!= null)onDrop(gameObject,go);}
voidOnInput (stringtext){ if(onInput!= null)onInput(gameObject,text);}
voidOnKey (KeyCodekey){ if(onKey!= null)onKey(gameObject,key);}
 
/// <summary>
/// Get or add an event listener to the specified game object.
/// </summary>
 
staticpublic UIEventListenerGet (GameObjectgo)
{
UIEventListenerlistener =go.GetComponent<UIEventListener>();
if(listener== null)listener =go.AddComponent<UIEventListener>();
returnlistener;
}
}



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