文档章节

NGUI基础之button(按钮)

乐逍遥jun
 乐逍遥jun
发布于 2016/02/22 21:40
字数 770
阅读 110
收藏 0

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




© 著作权归作者所有

乐逍遥jun
粉丝 6
博文 79
码字总数 39510
作品 0
东城
技术主管
私信 提问
NGUI v301 官网详解 Example 3 - Menu

这个例子教会大家 1、实现文本逐个打印的效果 使用 TypewriterEffect 组件 2、强化训练 在NGUI中如何使用 Animation 组件 3、学会使用 Popup Menu 组件 4、学会使用 Scroll Bar 组件 5、学会...

sayme
2014/01/06
3.9K
0
NGUI全面实践教程(大学霸内部资料)

NGUI全面实践教程(大学霸内部资料) 试读文档下载地址:链接:http://pan.baidu.com/s/1jGosC9g 密码:8jq5 介绍:NGUI全面实践教程(大学霸内部资料)本书是国内NGUI最新教程,以全新的3.8...

大学霸
2015/03/31
0
0
实战进阶学习Unity3d游戏开发-何韬-专题视频课程

实战进阶学习Unity3d游戏开发—35727人已学习 课程介绍 零起步,快进阶,基础+算法融汇到项目实战中,细节+核心直到上线,一步步引领菜鸟做出大虾级的开发。 课程收益 菜鸟进来,高手出去,自...

pkutao
2015/01/11
0
0
使用NGUINGUI的相关介绍

1.3 使用NGUI 要使用NGUI,需要首先为游戏项目导入NGUI插件资源,然后再创建UI Root对象,在这以后才可以添加各种UI控件,下面本节会详解介绍这些知识本文选自NGUI从入门到实战! 1.3.1 导入...

大学霸
2015/01/14
67
0
C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity3D,常常能看到对NGUI关键词)。 NGUI虽然不是Unity官方原生...

润物互动技术团队博客
2015/03/10
17.8K
4

没有更多内容

加载失败,请刷新页面

加载更多

spring源码分析6: ApplicationContext的初始化与BeanDefinition的搜集入库

先前几篇都是概念的讲解:回顾下 BeanDefinition 是物料 Bean是成品 BeanFactory是仓库,存储物料与成品 ApplicationContext初始化搜集物料入库,触发生产线,取出物料生产Bean 本文研究spr...

星星之焱
26分钟前
5
0
彻底解决tomcat乱码问题

本地项目请求访问,浏览器中文输出没问题。 部署到服务器上面之后,返回到浏览器的中文就乱码了。 尝试办法: 1.修改tomcat下的conf中的service.xml中的配置信息: 重新启动后,没有效果还是...

诗书易经
42分钟前
5
0
Java开发需要掌握的IDEA插件大全

1、Lombok 解释:这是最基本的插件,2017年就火了,还没用的百度一下吧。 博客链接:Intellij IDEA 安装lombok及使用详解 2、PlantUML integration 解释:各种类之间的关联图,高级开发必备。...

木九天
43分钟前
6
0
python学习10.05:Python range()快速初始化数字列表

实际场景中,经常需要存储一组数字。例如在游戏中,需要跟踪每个角色的位置,还可能需要跟踪玩家的几个最高得分。在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和纬度...

太空堡垒185
50分钟前
4
0
java单元测试,PowerMockito模拟方法内new对象

在做单元测试中有时候需要对方法内new出来的对象进行隔离,这是我们需要使用PowerMockito。 添加依赖 <dependency> <groupId>org.powermock</groupId> <artifactId>......

如梦之猿
51分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部