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类看一下
委托与事件实现了设计模式中的观察者模式,即一个为订阅者,一个为发送者。当消息发送时,凡是注册/订阅的用户都能收到
综上,一个简单好用的事件委托就实现了。希望能帮到大家,谢谢!
感谢这位作者朋友,简单易懂实用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# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]
- C# 委托delegate 和 事件event
- 终于会用c#中的delegate(委托)和event(事件)了
- 终于会用c#中的delegate(委托)和event(事件)了
- UnityEvent与C#事件系统性能对比
- 用 C++ 实现 C# 中的 委托/事件 (2-delegate event functor)
- 在Unity中使用事件/委托机制(event/delegate)进行GameObject之
- C#编程利器之四:委托与事件(Delegate and event) (下)
- [Unity&C#&事件委托]对委托事件的学习与实践
- 关于C#的delegate(委托)和event(事件)的使用
- 委托和事件[delegate and event]_C#
- C# delegate 委托 event 事件
- 重温C#2.0之委托(delegate,Delegate,MulticastDelegate)与事件(event)区别
- Tolua使用笔记六:在lua中操作C#的委托事件与在lua中对Unity的GameObject的操作
- c# event Action 判断事件列表中是否存在这个委托
- 看看可爱c#中的delegate(委托)和event(事件)用法好不好
- c#中事件Event声明和触发,以及自定义事件委托和系统委托EventHandler
- (转)C#中的委托(Delegate)和事件(Event)
- 在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信
- 终于会用c#中的delegate(委托)和event(事件)了