记得学委托跟事件的时候觉得不是很好理解,后来发现其实它是一个非常简单的东西.
为什么初学者觉得它不好理解呢?个人认为是把delegate翻译成委托 把evevt翻译成事件的人一定是英语老师,而不是程序员.
因为如果你去百度或者有道字典里去查它们的翻译真的就是直接翻译过来的 比如某地发生了一个大的事件你就可以说 a big event,这么直译带来的结果就是让新手难以理解.
那什么是委托?什么又是事件呢?
其实他们是一个东西,事件就是一个特殊的委托,或者更直接点事件就是委托(初学者可以暂时这么理解只不过出于安全考虑在委托的对象前面加一个event就变成了事件).
首先
委托的作用:传递方法.
其次
定义委托:public delegate void OnValueChange();
创建委托对象:public OnValueChange OnLevelChange;
最后
定义委托理解:你一定知道声明一个变量吧(int a )总知道吧,其实上面的OnValueChange跟int是一样的东西,只不过int是C#语言定义好的,而OnValueChange是我们自己定义的罢了.
废话不多说了.简单点(个人不喜欢长篇大论)
直接上图:
上面是相互关联的两个脚本,左边是一个,右边是另外一个脚本
如果懂MVC的话就比较好理解,不懂的话此段略过,不影响理解,左边有的脚本是游戏中玩家角色的信息(MVC中的Model),比如血量,金币数量,等级这些东西.右边的脚本是显示的信息,你可以直接理解成UI(也就是MVC中的View).
下面这句很重要,能不能理解就看这句能不能懂了
在右边脚本中给委托对象注册方法后,在左边的脚本中触发,当PlayerLevel发生改变时,就触发OnLevelChange的委托对象,然后它会自动调用右边脚本中给他注册的方法SetLevel,上面我说过委托的作用就是传递一个方法,也就是说OnLevelChange里面装着SetLevel这个方法.
看看像不像地雷 左边OnLevelChange是地雷的线,起触发的作用,绊到鬼子的腿就触发了,右边注册的方法相当于地雷,地雷爆炸,方法被调用.
好了就这些.