Unity3D NGUI事件监听的综合管理
首先,将Event Listener挂在按钮上
Event Listener的源码很简单
就是利用C#的时间委托机制
注册了UI场景的事件而已
public class UIEventListener : MonoBehaviour {
public delegate void VoidDelegate(GameObject go);
public delegate void BoolDelegate(GameObject go, bool state);
public delegate void FloatDelegate(GameObject go, float delta);
public delegate void VectorDelegate(GameObject go, Vector2 delta);
public delegate void StringDelegate(GameObject go, string text);
public delegate void ObjectDelegate(GameObject go, GameObject draggedObject);
public delegate void KeyCodeDelegate(GameObject go, KeyCode key); public object parameter; public VoidDelegate onSubmit;
public VoidDelegate onClick;
public VoidDelegate onDoubleClick;
public BoolDelegate onHover;
public BoolDelegate onPress;
public BoolDelegate onSelect;
public FloatDelegate onScroll;
public VectorDelegate onDrag;
public ObjectDelegate onDrop;
public StringDelegate onInput;
public KeyCodeDelegate onKey; void OnSubmit() { if (onSubmit != null) onSubmit(gameObject); }
void OnClick() { if (onClick != null) onClick(gameObject); }
void OnDoubleClick() { if (onDoubleClick != null) onDoubleClick(gameObject); }
void OnHover(bool isOver) { if (onHover != null) onHover(gameObject, isOver); }
void OnPress(bool isPressed) { if (onPress != null) onPress(gameObject, isPressed); }
void OnSelect(bool selected) { if (onSelect != null) onSelect(gameObject, selected); }
void OnScroll(float delta) { if (onScroll != null) onScroll(gameObject, delta); }
void OnDrag(Vector2 delta) { if (onDrag != null) onDrag(gameObject, delta); }
void OnDrop(GameObject go) { if (onDrop != null) onDrop(gameObject, go); }
void OnInput(string text) { if (onInput != null) onInput(gameObject, text); }
void OnKey(KeyCode key) { if (onKey != null) onKey(gameObject, key); } /// <summary>
/// Get or add an event listener to the specified game object.
/// </summary> static public UIEventListener Get(GameObject go)
{
UIEventListener listener = go.GetComponent<UIEventListener>();
if (listener == null) listener = go.AddComponent<UIEventListener>();
return listener;
}
}
那么,如何调用呢
使用这个脚本进行统一管理后
就不需要将脚本一个一个地拖入按钮
而是在任何脚本或类中都可以直接调用
void Start() {
GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
UIEventListener.Get(button).onClick = OnClick;
} void OnClick(GameObject button)
{
Debug.Log(button.name);
}
就是这样
这样一来,NGUI的事件处理就变得简单而且条理了
Unity3D NGUI事件监听的综合管理的更多相关文章
- NGUI事件监听之UIEventListener的使用
NGUI的事件绑定可以使用 UIButtonMessage 在一个游戏对象上添加Button Message组件: 在Button Message组件上添加要通知的游戏对象上所挂载的脚本的方法 Tar ...
- 第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )
GUI编程 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 简介 GUi的核心技术:Swing AWT 1.界面不美观 2.需要jre环境 为什么要学习GU ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- JS 中的事件绑定、事件监听、事件委托
事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...
- mvc-2事件监听
现代浏览器都支持的事件 click dbclick mouseover mousemove mouseout focus blur change(表单输入框特有) submit(表单特有) addEv ...
- Ext JS 5的声明式事件监听
在前文<在Ext JS 5使用ViewControllers>中,简单的介绍了Ext JS 5的一项重要改进——声明式事件监听.在本文,将深度探讨如何使用声明式事件监听啦简化应用程序的视图 ...
- UI事件监听的击穿
什么是UI事件监听的击穿 在游戏视图中,有两个UI界面叠在一起的时候,单击一个空白处,却触发了被覆盖在下层了UI界面中的单击事件,这就是单击击穿了上层界面. 假设场景中放置了一个箱子,单击箱子会触发一 ...
- 前端基本知识(四):JS的异步模式:1、回调函数;2、事件监听;3、观察者模式;4、promise对象
JavaScript语言将任务的执行模式可以分成两种:同步(Synchronous)和异步(Asychronous). “同步模式”就是一个任务完成之后,后边跟着一个任务接着执行:程序的执行顺序和排列 ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
随机推荐
- Django静态文件路径设置
提示 : Error fetching command 'collectstatic': You're using the staticfiles app without having set the ...
- .net Winfrom 僵尸窗口 的问题
执行顺序如下: Form1 form1 =new Form1(); form1.ShowDialog(); Form2 form2= Application.OpenForms["Form2 ...
- 使用line_profiler查看api接口函数每行代码执行时间
项目情景描述: 在restful架构风格的项目交付测试的过程中,某接口出现 请求超时导致的http 502 Bad Gateway,于是开始排查具体是接口函数中的哪行代码或函数 响应时间过长导致的50 ...
- WireShark过滤解析HTTP/TCP
过滤器的使用: 可利用“&&”(表示“与”)和“||”(表示“或”)来组合使用多个限制规则, 比如“(http && ip.dst == 64.233.189.104) ...
- php5.3命名空间内使用 php内置类的时候
在命名空间内使用内置类库的时候,需要使用 \ 比如 $zip =new \ZipArchive;
- 求sum=1+111+1111+........+1....111 .
1,思路 大数相加,若直接使用int,或者long都会超出长度,因此考虑使用String存储. 2,代码 public class LargeNumAdd { public static void m ...
- USB OTG简介、与普通USB线的区别
USB有三类接口A类接口 -----------最常见的扁平接口,四芯 VCC GND D+ D- B类接口 ...
- linux2.6硬盘扇区直接读写程序
下面的程序可以在linux2.6内核直接读写硬盘的指定扇区,也是根据网上一个朋友的做法做了修改的: 有两个不是很明白的地方就是:1.bd_claim函数的使用,这个是个递归函数,像是匹配内存指针和设备 ...
- 微信公众号开发系列-Http请求封装基类
HttpHelper请求封装基类,支持get请求和POS请求,方便微信开发接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 [csharp] view plaincopy using ...
- 【原】Spring源码浅析系列-导入源码到Eclipse
用了Spring几年,平时也断断续续在项目里看过一些源码,大多都是比较模糊的,因为一旦从一个地方进去就找不到方向了,只能知道它大概是做了什么事能达到这个功能或者效果,至于细节一般没有太深入去研究.后来 ...