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 ...
随机推荐
- Qt 网络模块如何使用?
1.网络模块介绍 类名 说明 中文 QAbstractNetworkCache The interface for cache implementations 缓存实现的接口 QNetworkCach ...
- Linux文本的处理
Linux最最最最重要的哲学思想就是:一切皆文件.文件以及文件的操作在LInux操作系统中是非常的重要.熟练使用精悍小巧快捷的文本处理方式让效率更高. 一.文件查看命令 less 分页查看 [root ...
- 关于本地化(localization)
关于本地化(localization) 我们都知道,如果不需要做国际化版本的App.我们只需要在info.plist 里修改CFBundleDisplayName就可以了,其实做国际化也就是在不同的国 ...
- OkHttp拆解之调用流程图
- HI3531串口测试程序(arm)
#include<stdio.h> unsigned int UART0_ADDR = 0x20080000; unsigned int retu=0; int i=0; void del ...
- 航空客户价值分析特色LRFMC模型——RFM升级
本文转载自微信公众号TIpDM. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 我们说RFM ...
- JXL组件生成报表报错(二)
JXL组件生成报表 1.具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonam ...
- g++基本用法
用法:g++[选项]文件... g++编译流程: main.cxx #include <iostream> using namespace std; int main(void) { co ...
- hibernate(二)主键生成策略
hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...
- 芝麻HTTP:分析Robots协议
利用urllib的robotparser模块,我们可以实现网站Robots协议的分析.本节中,我们来简单了解一下该模块的用法. 1. Robots协议 Robots协议也称作爬虫协议.机器人协议,它的 ...