NGUI基础之button(按钮)

时间:2023-03-08 21:13:01

1,button的创建;2,button组件的基本属性;3,button的事件监听

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


1,button的创建

编辑器创建

NGUI基础之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

NGUI基础之button(按钮)

按钮的响应范围

NGUI基础之button(按钮)

UIButton的属性

NGUI基础之button(按钮)


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;
}
}