Untiy-委托[delegate]和事件[event]详解和区别(二)
目录
1.博文介绍
承接上一篇文章关于委托(delegate)介绍,本篇文章,将要介绍Event的具体用法还有和委托的一些小差别。他和委托的实例化很相似,只有一些地方不太一样,博主在学习的时候最大的疑问就是,这个事件存在的意义,后来研究了一段时间,主要在油管上看了两个视频,外国人在技术方面的见解有些地方还是很不错的,文章末尾会把油管链接贴出来,可以技术上网的同学可以看一下,关于观察者模式,在网上有很多的篇幅去介绍,若是读者不太清楚可以去了解一下再来看本篇文章,会有一个很好的理解。
2.事件(event)
这个事件一般都是结合委托来使用的,声明方法如下:
public delegate void MyDelegate( ); --声明一个委托
public event MyDelegate myEvent; --声明了一个和委托MyDelegate相关联的事件myEvent;
3.事件用法
关于事件的用法,因为事件和委托的示例化很相像,博主先贴两段代码供读者们分析看一下!
EventOne: 该脚本声明了一个委托MyDelegate,并实例化了委托myEvent,并声明了一个MyDelegate相关连的事件myEvent,如果点击A,执行实例化委托myEvent,如果点击D执行事件myEvent,这里注意判空。
using UnityEngine;
/// <summary>
/// EventOne
/// Date:2018/11/4
/// Author:Mr.Sun
/// </summary>
public class EventOne : MonoBehaviour
{
public delegate void MyDelegate(); //声明委托
public static MyDelegate myDelegate; //实例化委托
public static event MyDelegate myEvent; //声明了MyDelegate相关联的事件
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.A)) //点击A执行实例化委托
{
if (myDelegate!=null)
{
myDelegate();
}
}
else if (Input.GetKeyDown(KeyCode.D)) //点击D执行事件
{
if (myEvent!=null)
{
myEvent();
}
}
}
}
EventTwo:该脚本声明了两个方法FucOne,FucTwo,并绑定了委托和事件,事件的绑定和解除绑定方法和实例化委托的一样,绑定方式使用+=,解除绑定使用-=。
using UnityEngine;
/// <summary>
/// EventTwo
/// Date:2018/11/4
/// Author:Mr.Sun
/// </summary>
public class EventTwo : MonoBehaviour {
// Use this for initialization
void Start ()
{
EventOne.myDelegate += FucOne;
EventOne.myDelegate += FucTwo;
EventOne.myEvent += FucOne;
EventOne.myEvent += FucTwo;
}
void FucOne()
{
print("执行了方法1");
}
void FucTwo()
{
print("执行了方法2");
}
}
那么接下来让我们查看点击后输出的结果!
点击A:
点击D:
是不是发现一个问题,这两个东西怎么这么像,既然如此,我要你这个事件干什么,你能干的事情我直接实例化自己不就可以了吗,但是存在就有意义,而且他用处还挺大!
这个event大家可以把它理解为一个特殊的实例化委托,他有什么特效呢?
1.声明的事件只能在当前脚本中调用--也就是说myEvent只能在EventOne中调用
2.事件的绑定只能使用 += 不可以使用 =
event就是一个特殊的实例化委托,并且加上了两个限定,之前在网上看的一篇博客介绍,其中一个比喻就是报社和订报的人,现在这个event就是报社,其他方法就是订报的人,能够发报的人只有报社,也就是声明了event的脚本,若是看过我上一篇文章,你就会发现,在上一篇文章当中小明的委托被别人调用后造成的假死或者假出生的情况,用上event后就不会出现了。好了到此大家是不是发现自己对于委托和事件的使用有了一个很清晰的认识,本篇文章到此也就结束了。
注意: public delegate void MyDelegate();
public static event MyDelegate myEvent;
上述的两个式子可以简写成:public static event Action myEvent;
想要具体了解的可以查看我下一篇文章!
传送门:https://blog.csdn.net/Mr_Sun88/article/details/83689638
4.资源下载
本篇中所用源码下载:
https://download.csdn.net/download/mr_sun88/10762463
5.推送
你们的油管链接,需要科学上网:
https://www.youtube.com/watch?v=TdiN18PR4zk
6.结语
希望各位同学看过之后能够对委托和事件又一个更加深入的了解,另博主能力有限,文中若有错误的地方期望各位看家可以指点交流。
QQ交流群:806091680(Chinar)
该群为CSDN博主Chinar所创,推荐一下!我也在群里!
本文属于原创文章,转载请著名作者出处!!!!!