美文网首页
消息的传递-委托与事件的运用

消息的传递-委托与事件的运用

作者: 带着面包去流浪 | 来源:发表于2018-02-02 17:30 被阅读0次

脚本一:用于发送消息

//挂载在所有的button父物体上

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

////// 定义button信息类

/// public class ButtonInfo{  

public int id;

  public GameObject obj;

}

public class ButtonTest : MonoBehaviour {  

public static ButtonTest instance;  

Button[] buttonArr;  

//传递按钮点击的委托 

  public delegate void OnButtonClickDelegate(ButtonInfo info);

  public event OnButtonClickDelegate OnButtonClickDel;   

  Button sendString;    string str;

  //点击按钮传递字符串的委托

    public delegate void OnSendStringButtonDelegate(string str); 

  public event OnSendStringButtonDelegate sendstring;  

    void Awake() {   

    instance = this; 

  } 

  void Start() {      

//传递String参数     

  sendString = GameObject.Find("Button_String").GetComponent();

      sendString.onClick.AddListener(() => OnSendStringButtonClick(str));

        //传递button点击事件(ButtonInfo 用来区分点击的是哪个按钮)

        buttonArr = transform.GetComponentsInChildren();

        for (int i = 0; i < buttonArr.Length; i++)

        {

            ButtonInfo info = new ButtonInfo();

            info.id = i;

            info.obj = buttonArr[i].gameObject;

            buttonArr[i].onClick.AddListener(() => OnButtonClick(info));

        }

    }

    // 多个按钮的点击事件

    void OnButtonClick(ButtonInfo info)

    {

        //print(info.id);

        if (OnButtonClickDel != null)

        {

            OnButtonClickDel(info);

        }

    }

    // 传递字符串的点击事件

    void OnSendStringButtonClick(string str) {

        str = "发送消息";

        if (sendstring!=null)

        {

            sendstring(str);

        }

    }

}

脚本二: 用于接收消息

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class OhterThingScripts : MonoBehaviour {

void Start () {

        ButtonTest.instance.OnButtonClickDel += print;

        ButtonTest.instance.OnButtonClickDel += print02;

        ButtonTest.instance.sendstring += ReveiceString;

    }

void print (ButtonInfo info) {

        print(info.id+"————传递消息成功");

        switch (info.id)

        {

            case 0:

                print("点击了第一个按钮");

                break;

            case 1:

                print("点击了第二个按钮");

                break;

            case 2:

                print("点击了第三个按钮");

                break;

            case 3:

                print("点击了第四个按钮");

                break;

        }

    }

    void print02(ButtonInfo info) {

        print(info.id + "————消息重用---成功");

    }

  void ReveiceString(string str)

    {

        print(str);

    }

}

相关文章

  • 消息的传递-委托与事件的运用

    脚本一:用于发送消息 //挂载在所有的button父物体上 using System.Collections; u...

  • 前端知识二

    事件委托(事件代理) 事件委托也可以叫事件代理,是事件冒泡与事件捕获的运用。 基本概念 一般来讲,会把一个或者一组...

  • 总结.Net基础知识——献给即将入坑的同行们(二期)

    事件是不是一种委托? 委托是一种安全的函数指针,事件是一种消息机制 委托与事件是什么关系?为什么要使用委托 委托提...

  • Unity3d-c#-观察者设计模式-猫抓老鼠

    在这个例子中运用了委托事件机制讲述了事件和委托的区别最大的区别是:事件是特殊的受限的委托,事件只能在类内部调用,不...

  • 触摸消息的事件传递

    InputEventReceiver类构造方法: 和接受UI刷新的消息类似,将一个消息队列传入内核,有消息的时候内...

  • 原始类型与事情委托

    1.绑定事件: 二、事件冒泡与事件捕获 事件委托 案例见事件委托 计时器

  • C#——委托与事件系列一

    本来应该学习泛型与委托的,但是发现C#这里还没有系统的记录过委托与事件,所以先打算把委托与事件补上再继续泛型与委托...

  • 委托,Lambda,事件

    委托 声明委托 Lambda 事件与委托的区别 事件不能再类的外部调用,可以在外部注册 委托可以在类的外部调用,可...

  • 深入理解回调 CallBack

    相信大家都知道委托和事件,没错,委托和事件是用来传递和保存函数用的,那么 回调 呢,近段时间的学习中经常碰到 回调...

  • 事件与事件委托

    DOM0级事件: 通过javascript制定事件处理程序的传统方式。就是将一个函数赋值给一个事件处理属性。第四代...

网友评论

      本文标题:消息的传递-委托与事件的运用

      本文链接:https://www.haomeiwen.com/subject/vvmezxtx.html