NGUI事件的种类非常多。比方点击、双击、拖动、滑动等等,他们处理事件的原理差点儿万全一样,本文仅仅用button来举例。

方法一.直接监听事件

把以下脚本直接绑定在button上。当button点击时就能够监听到。这样的方法不太好非常不灵活。

void OnClick()

{

Debug.Log(“Button is Click!!!”);

}

方法二.使用SendMessage

选择button后。在Unity导航菜单条中选择Component->Interaction->Button Message 组件。

Target:接收button消息的游戏对象。

Function Name:接收button消息的方法,拥有这种方法的脚本必须绑定在上面Target对象身上。

Trigger:触发的事件,OnClick显然是一次点击。

Include Children :是否让该对象的全部子对象也发送这个点击事件。

到UIButtonMessage.cs这个脚本中看看,事实上非常easy就是调用Unity自身的SendMessage而已。

void Send ()

     {

         if (string.IsNullOrEmpty(functionName)) return;

         if (target == null) target = gameObject;

if (includeChildren)

         {

             Transform[] transforms = target.GetComponentsInChildren<Transform>();

for (int i = , imax = transforms.Length; i < imax; ++i)

             {

                 Transform t = transforms[i];

                 t.gameObject.SendMessage(functionName, gameObject, SendMessageOptions.DontRequireReceiver);

             }

         }

         else

         {

             target.SendMessage(functionName, gameObject, SendMessageOptions.DontRequireReceiver);

         }

     }

方法三.使用UIListener

这个也是推荐大家使用的一种方法,选择button后在Unity导航菜单条中选择Component->NGUI->Internal ->Event Listener。挂在button上就能够,它没有不论什么參数。

在不论什么一个脚本或者类中就可以得到button的点击事件、把例如以下代码放在随意类中或者脚本中。

void Awake ()

    {  

                 //获取须要监听的button对象

         GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");

                 //设置这个button的监听,指向本类的ButtonClick方法中。

        UIEventListener.Get(button).onClick = ButtonClick;

    }

//计算button的点击事件

     void ButtonClick(GameObject button)

     {

         Debug.Log("GameObject " + button.name);

}

怎么样是不是非常灵活?再看看它的源代码,使用的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, Vector 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 (Vector 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;

         }

     }

全部对于Unity3D中 NGUI 触发事件的监听方法的更多相关文章

  1. Android View中的控件和监听方法...

    PS:居然三天没写博客了...今天补上...东西虽多,但是都是一些基础...代码多了一些,有人可能会这样问,粘这么多代码有毛用..其实对于一个Android的初学者来说,一个完整的代码是最容易帮助理解 ...

  2. Android下 scrollview的滚动停止事件的监听方法

    使用递归调用的方法,每隔5毫秒检查一下是否已经停止,如果已经停止,就拿到事件啦! 不扯蛋,直接上代码. scrollContent就是我的scrollview. [代码]java代码: ? 1 2 3 ...

  3. Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法

    时隔一个多月我又回来啦! 坚持真的是很难的一件事,其它事情稍忙,就很容易说服自己把写博客的计划给推迟了. 好在终于克服了自己的惰性,今天又开始了. 本篇继续我的Luaframework学习之路. 一. ...

  4. MVC框架入门准备(三)事件类 - 事件的监听和触发

    在mvc框架中可以看到事件类,实现事件的监听和触发. 举例: <?php /** * 事件类 */ class Event { // 事件绑定记录 private static $events; ...

  5. laravel中事件的监听和订阅

    一.前言 更新员工部门主管的时候,需要重新更新一下缓存,这个会比较耗时.所以计划放到队列中来执行.后来想了想,其实用一下事件监听也能实现.人家都说好,然是我也没感觉到有什么好的. 二.正文 1. 在p ...

  6. Android中Button的五种监听事件

    简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...

  7. tomcat触发ServletContext初始化监听事件的源码(原创)

    tomcat 8.0.36 知识点: 动态监听器的好处可以根据环境条件进行选择性添加. 静态监听器有七类. ServletContextAttributeListener ServletRequest ...

  8. 最优-scroll事件的监听实现

    1. 背景和目标 前端在监听scroll这类高频率触发事件时,常常需要一个监听函数来实现监听和回调处理.传统写法上利用setInterval或setTimeout来实现. 为了减小 CPU 开支,往往 ...

  9. 深入理解Spring的容器内事件发布监听机制

    目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监 ...

随机推荐

  1. Gson 转日期中的错误

    今天在用Gson做json转化是遇到一个问题,本地执行没有问题(windows 7),包丢到服务器上(Centos)就报错了. 后经分析发现DateTypeDapter类中取本地环境的日期格式参考ht ...

  2. PKUSC2017 游记 密码:blog密码

    退役之前,写点破事乐呵乐呵 省选滚大粗   报了PKU和THU的SC  果然THU直接审核不通过... 于是就来到了PKU   滚粗狗就又续命几天. Day1 上午考数学 喜闻乐见啥都不会 出来一对题 ...

  3. Js控制样式的诸多方法

    function TableCss(options){ //如果没参数,就退出 if(arguments.length < 1 || !document.getElementById(optio ...

  4. c# winform控件dock属性停造位置、摆放顺序详解

    dock : [英文释义- 码头.依靠][winform释义- 获取或设置当前控件依靠到父容器的哪一个边缘.] 用途:多数控件都有这个属性,主要用来设置控件的布局. 但对于不太了解这个属性的朋友来说有 ...

  5. HDFS你一定要知道,要考的

    你肯定听过Hadoop,对就是那头奔跑的小象. Hadoop作为大数据时代代表性的解决方案被大家所熟知,它主要包含两部分内容: HDFS分布式文件存储 MapReduce分布式计算框架 前面我们分析存 ...

  6. MVC系列学习(四)-初识Asp.NetMVC框架

    注:本文章从伯乐那盗了两张图,和一些文字: 1.MVC设计模式 与 Asp.Net Mvc框架 a.MVC设计模式 MVC设计模式 是一种 软件设计模式,将业务逻辑 与 界面显示 分离,并通过某种方式 ...

  7. 如何下载Nginx(Windows) 并且简单使用

    官网地址:http://nginx.org/ 进入官网后点击: 推荐下载的是稳定版: 现在开始简单的使用: 一.打开下载文件的目录解压后打开文件 二.在其他盘新建一个test.html,静态资源,用来 ...

  8. Git的使用及托管代码到GitHub

    首先Git是一个开源的分布式版本控制工具,用git创建代码仓库. 仓库(Repository)是用于保存版本管理所需信息的地方,本地代码 提交到 代码仓库中,如果需要还可以 再推送到 远程仓库中. 所 ...

  9. Angular——基本使用

    基本介绍 1.AngularJS是一个框架(诸多类库的集合)以数据和逻辑做为驱动(核心). 2.AngularJS有着诸多特性,最为核心的是:模块化.双向数据绑定.语义化标签.依赖注入等. 模块化 使 ...

  10. [Windows Server 2008] Ecshop安全设置

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:ECSHO ...