http://blog.csdn.net/chiuan/article/details/9290651?utm_source=tuicool&utm_medium=referral

来分享一个新的NGUI按钮方法回调的脚本,个人不是很喜欢原来那个UIButtonMessage,根据原来稍微修改了下。会比原先的智能和优化代码结构,效率也会好些。

认识:一个按钮事件发生理应有2个东西:1、发生事件,2、接收对象

1、发生事件:

如上图,我们看见这是一个标准的NGUI创建后的按钮对象,添加了TTButtonMessage后,会提示选择发生的条件、接受者是谁、处理方法KEY

图中我们看到选择了一个Onclick方法KEY,这个Key是从Receiver身上获取的。

2、接受者

  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. /// <summary>
  4. /// TT button message Receiver,Sample.
  5. /// chiuanwei 2013.5.7
  6. /// </summary>
  7. public class SampleButtonReceiver:TTButtonReceiver
  8. {
  9. public override void Start()
  10. {
  11. base.Start();
  12. Debug.Log("Start.");
  13. Debug.Log("Button Msg Length = " + ButtonMsgs.Count);
  14. }
  15. #region For Button Msg
  16. //Must implement init function of Button Receiver.
  17. //and init all function here.
  18. public override void InitButtonFunction()
  19. {
  20. base.InitButtonFunction(
  21. Msg.create("Onclick",Onclick)
  22. );
  23. }
  24. void Onclick(GameObject go)
  25. {
  26. Debug.Log("THE Button IS Clicked.");
  27. }
  28. #endregion
  29. }

上面就是一个最简单的接收者写法了,绑定在接收物体身上即可。

我们新建一个脚本继承TTButtonReceiver,然后复写Start()、InitButtonFunction()方法

1、在Start中要调用一下基类中的Start()执行初始化

2、在InitButtonFunction中,要调用base.InitButtonFunction(……),然后传入你需要创建的按键方法通过KEY - FUNCTION

例如我创建多个方法会如下调用:

  1. base.InitButtonFunction(
  2. Msg.create("Onclick",Onclick),
  3. Msg.create("Onclick2",Onclick2),
  4. Msg.create("Onclick3",Onclick3)
  5. );

3、延伸用法、贴士:
1、继承Receiver后有接口可以提供外部获取某个KEY的方法是否存在:public Msg GetMsgByKey(string key)
2、如果Reciever变化,选择过的KEY不会自动Remove,而会在面板提示你Recevier是否存在这个KEY的方法

最后漏了补上:
打包好的文件,要先把NGUI导入后再导这个包:http://game.ceeger.com/forum/read.php?tid=11789&fid=16

NGUI 3.5 ----- UIButton OnClick

NUGI点击button获取input的值
using UnityEngine;
using System.Collections;
 
public class Main : MonoBehaviour {
   UIInput messageInput;
   UIButton sendButton;
void Start () {
//找到Message
messageInput = Gameobject.Find("MessageInput").GetComponent<UIInput>();
//找到SendButton
sendButton = Gameobject.Find("SendButton").GetComponent<UIButton>();
//NGUI3.0之后使用EventDelegate.Add添加监听事件
EventDelegate.Add(sendButton.onClick, delegate(){
SendMessageToServer();
});
 
void SendMessageToServer(){
string text = NGUIText.stripSymbols(messageInput.value);
Debug.Log("Text----> " + text);
}
 
 
}

【转】一个新的UIButtonMessage 给NGUI,使用委托,自动选择Receiver提供的方法的更多相关文章

  1. 今天代码中接触到了一个新的东西。js的上下自动滚动,无缝对接。

    js的上下自动滚动,无缝对接.为什么会用到这个东西呢?因为我在做公司的官网项目的修改的时候.有一个产品介绍的页面,会有很多的产品出现在,中间部分的列表里.但是又不能够使用分页.所以我就在想如果,列表数 ...

  2. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  3. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  4. Step by step 如何创建一个新森林

    原创地址:http://www.cnblogs.com/jfzhu/p/4006118.html 转载请注明出处 创建一个新森林就是在一台计算机上安装AD DS,并将这台计算机提升为域控制器. 演示环 ...

  5. 3.通过现有的PDB创建一个新的PDB

    实验说明:创建PDB除了可以通过种子PDB创建外,现在测试通过一个现有的用户PDB克隆创建新的PDB数据库 实验步骤: 1.创建测试数据 SQL> alter session set conta ...

  6. 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

    喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...

  7. ZeroMQ接口函数之 :zmq_ctx_new – 创建一个新的ZMQ 环境上下文

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_new zmq_ctx_new(3)               ØMQ Manual - ØMQ/3.2 ...

  8. ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 ...

  9. Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法

    VirtualBox新建虚拟机时报错,不能为虚拟机打开一个新任务的原因 解决办法如下 1.保证bios里的virtualization technology的选项开启,不同电脑BIOS设置可能会不一样 ...

随机推荐

  1. html中表格元素的相关总结

    表格元素相关总结: 1.在CSS中,内部表元素(如td.tr.col等)生成矩形框,这些矩形框包含内容.内边距和边框,但没有外边距,因此如果定义外边距,浏览器将忽略该定义:对于table元素,外边距有 ...

  2. RobotFrameWork(三)数据类型

    1.1 数字变量 执行结果: 1.2 布尔变量和None/null 执行结果: 1.3 字符串.元组.list和字典 执行结果: 1.4 space和empty 执行结果:

  3. Python:Pycharm下无法导入安装好的第三方模块?

    Pycharm下无法导入安装好的第三方模块requests? 在cmd下使用pip安装好requests模块后,可以使用import requests,但在Pycharm IDE下无法导入,出现如下错 ...

  4. c语言libcurl库的异步用法

    multi接口的使用会比easy 接口稍微复杂点,毕竟multi接口是依赖easy接口的,首先粗略的讲下其使用流程:curl_multi _init初始化一个multi curl对象,为了同时进行多个 ...

  5. Redis学习笔记8--Redis发布/订阅

    发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似.pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者 ...

  6. 导入excel数据到数据库

    1.上传excel到服务器 jsp页面代码 <form action="actionname" method="post" id="form1& ...

  7. 面向切面编程AOP

    本文的主要内容(AOP): 1.AOP面向切面编程的相关概念(思想.原理.相关术语) 2.AOP编程底层实现机制(动态代理机制:JDK代理.Cglib代理) 3.Spring的传统AOP编程的案例(计 ...

  8. CentOS7 FTP服务搭建(虚拟用户访问FTP服务)

    概述 最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白.Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建.FT ...

  9. Linux yum配置文件详解

    说明:经过网上抄袭和自己的总结加实验,非常详细,可留作参考. yum的配置一般有两种方式:   一种是直接配置/etc目录下的yum.conf文件, 另外一种是在/etc/yum.repos.d目录下 ...

  10. HDU 3642 Get The Treasury (线段树扫描线)

    题意:给你一些长方体,问你覆盖三次及以上的体积有多大 首先我们观察x轴y轴一样很大,但是z轴很小,所以我们可以枚举z轴(-500,500),注意我们枚举的是每一段长度为一的z轴的xy轴的面积而不是点. ...