NGUI学习笔记 - 通过UIEventlistener和UIbutton来学习NGUI的消息机制
来源:互联网 发布:3g模型 淘宝 编辑:程序博客网 时间:2024/04/30 14:27
先来看UIEventlistener脚本,以鼠标点击消息为例;
首先定义一个委托类型,
public delegate void VoidDelegate (GameObject go);
接着定义这个委托类型的变量onClick,用于存储响应点击事件的方法
public VoidDelegate onClick;
定义事件响应有有函数OnClick,有消息传来时,首先判断委托是否为空,及判断是否有响应方法,如果有,就开始给委托中的方法们传参(gameobject一般都为附着的物体本身,这个应该不难理解),接着一个个地执行
void OnClick () { if (onClick != null) onClick(gameObject); }
使用时,通过Get()函数获取要监听的物体,函数会自动为其添加UIEventlistener脚本,这样该物体就能监听UIEventlistener中定义的事件了
static public UIEventListener Get (GameObject go) { UIEventListener listener = go.GetComponent<UIEventListener>(); if (listener == null) listener = go.AddComponent<UIEventListener>(); return listener; }
eg:
GameObject button = GameObject.Find("Button"); UIEventListener.Get(button).onClick = ButtonClick; void ButtonClick(GameObject button) { Debug.Log("GameObject " + button.name); }
因为在UIButton中为鼠标点击响应事件添加方法的原理和在UIEventlistener中为鼠标点击事件添加响应方法的原理相同,接下来就通过UIbutton进一步说明NGUI的消息机制
1,UIbutton中定义了一个委托代理类型的列表onClick,来存储多个响应的方法,
public List<EventDelegate> onClick = new List<EventDelegate>();
2,UIButtonEditor在unity编辑器中绘制了编辑界面供使用者添加方法,代码如下:
NGUIEditorTools.DrawEvents("On Click", button,button.onClick, false);
编辑界面如图:
既然委托本身就可以存储多个方法,为什么还要将每个方法放入不同的委托,再将委托放入列表?笔者认为这和在编辑器中的绘制有关,编辑器中每添加一个方法,列表的长度就加一
3,鼠标点击时,UICamera发出OnClick消息,UIbutton中的OnClick函数默认调用委托onClick中的方法
public virtual void OnClick () { if (current == null && isEnabled) { current = this; EventDelegate.Execute(onClick); current = null; } }
EventDelegate中的Execute函数执行onClick中的方法
static public void Execute (List<EventDelegate> list) { if (list != null) { for (int i = 0; i < list.Count; ) { EventDelegate del = list[i]; if (del != null) { del.Execute(); if (i >= list.Count) break; if (list[i] != del) continue; if (del.oneShot) { list.RemoveAt(i); continue; } } ++i; } }
当然,也可以直接在OnClick()中添加响应方法,这里就不详细说了哈,有兴趣的可以去试试~~
1 0
- NGUI学习笔记 - 通过UIEventlistener和UIbutton来学习NGUI的消息机制
- NGUI UIEventListener
- Unity3D学习笔记——NGUI之UIButton
- UGUI实现NGUI的UIEventListener功能
- 【Unity】 NGUI UIEventListener
- NGUI学习笔记
- 2.NGUI学习笔记
- NGUI学习笔记
- NGUI学习笔记(摘)
- NGUI学习笔记(摘)
- NGUI学习笔记--用法
- NGUI学习笔记
- NGUI学习笔记汇总
- NGUI 学习笔记
- NGUI学习笔记
- NGUI学习笔记(摘)
- NGUI学习笔记(详细)
- NGUI入门学习笔记
- eclipse下的tomcat启动抛出了内存溢出的错误。
- Date_Time(继承)
- python中消除冗余参数的方法
- curl上传文件到远程,php版本不同的做法
- android draw9patch工具使用
- NGUI学习笔记 - 通过UIEventlistener和UIbutton来学习NGUI的消息机制
- may 6 s
- ogg同步表
- Android Calendar添加本地账户
- Java基础学习中,关于面向对象中多态、抽象类、接口的总结
- maven项目启动报错
- Lucas–Kanade
- GridView实现多表头合并,解决表头数据对不齐
- 杭电1010