您的位置:首页 > 移动开发 > Unity3D

Unity(三)C#委托中的事件Event

2017-10-26 11:38 429 查看
PS:以前看Delegate还迷迷糊糊,今天刚好在一个插件中看到Event,很好用.例如当完成某个事情时告诉其他人做完了

感谢这位作者朋友,简单易懂实用http://www.cnblogs.com/promise-7/archive/2012/05/14/2500759.html

基于作者的思路,在Unity里public对象后,Start里 new 该类的委托并绑定某方法即可。而Private该对象则不行,原因没有分配内存空间==null

方式一:

代码模块:

//发送者

 Class Sender

{

 //声明委托,可带参

 public delegate void AnimationEventHandler(string str);

//声明事件

public event  AnimationEventHandle handler;

//完成某任务开始发送消息

 void SendMessage()

 {

  If(handler!=null)

  {

   handler("我已完成某任务!");

 }

 }

}

//接收者

Class Listener

{

   //将该类暴露,类似Public

   [SerializeField]

    private Sender  sender;

//预先注册事件并绑定方法 

  void Awake()

{

 if(sender!=null)

  sender.handler+=Reciever;

}

//如果委托带参,此方法也应同参

void  Reciever(string sr)

{

 Print("收到消息:"+sr);

 //该我Do something了

 //

}

void OnDestroy()

{

//移除注册过的委托

sender.handler-=Reciever;

}

.

方式二:

 可以注意到,如果想得到事件的回调,前提是必须先注册并委托给X函数。那么,如果完成XXX后调用委托则若有B /C/D等人的话都会收到消息。

但是我只想当前的函数得到消息就可。于是,我们需要使用的时候再来指定X函数

X类 (某声音对象播放完后委托给X函数,得到对象的ID)





在AudioObject类看一下



委托与事件实现了设计模式中的观察者模式,即一个为订阅者,一个为发送者。当消息发送时,凡是注册/订阅的用户都能收到

综上,一个简单好用的事件委托就实现了。希望能帮到大家,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#