zoukankan      html  css  js  c++  java
  • 【转】一个新的UIButtonMessage 给NGUI,使用委托,自动选择Receiver提供的方法

    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、接受者

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


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

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

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

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

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

    [csharp] view plain copy
     
     print?
    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的值
    NGUI 3.5 ----- UIButton OnClick - Leslie - Leslie
     
    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);
    }
     
     
    }
  • 相关阅读:
    点滴积累【JS】---JS小功能(JS实现侧悬浮浮动)
    点滴积累【JS】---JS小功能(JS实现隐藏显示侧边栏,也就是分享栏的隐藏显示)
    点滴积累【JS】---JS小功能(JS实现排序)
    php修改排序,上移下移
    PHP获取上周、本周、上月、本月、本季度、上季度时间方法大全
    php简陋版实现微信公众号主动推送消息
    JQuery处理json与ajax返回JSON实例
    页面滚动动态加载数据,页面下拉自动加载内容 jquery
    CGI/FASTCGI/ISAPI区别
    CodeIgniter类库之Benchmarking Class ,计算代码的执行时间
  • 原文地址:https://www.cnblogs.com/mimime/p/6240367.html
Copyright © 2011-2022 走看看