观察者模式定义了对象之间的一种一对多的依赖关系,使的每当一个对象状态发生改变时,其相关依赖对象都得到通知并被更新。
观察者模式如此有用以至于C#中直接将观察者模式集成在了语言层面(event关键字)
所以观察者模式的例子我就不讨论观察者模式的具体实现了。
取而代之的,这个例子关注Unity的各种事件如何实现。
通过几种不同的使用方式实现了发布-订阅。 分别是:
- C#语言支持的:
- 使用delegate
- 使用EventHandler
- 使用Action
- Unity封装的:
- UnityAction
- UnityEvent
其中纯C#写法,推荐用Action。 而UnityAction和Action相比没什么大的区别
public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);
public delegate void UnityAction<T0, T1>(T0 arg0, T1 arg1);
在性能上UnityAction慢一丢丢,但UnityAction可以和编辑器一起配合使用。 ref:Event Performance: C# vs. UnityEvent
而UnityEvent是封装了一层的,本质上是一个类。