TypeEventSystem 是基于 EasyEvent 实现的。
EasyEvent 也是一个可以脱离架构使用的工具。
这里我们来学习一下基本用法。
基本使用
代码如下:
using UnityEngine;
namespace QFramework.Example
{
public class EasyEventExample : MonoBehaviour
{
private EasyEvent mOnMouseLeftClickEvent = new EasyEvent();
private EasyEvent<int> mOnValueChanged = new EasyEvent<int>();
public class EventA : EasyEvent<int,int> { }
private EventA mEventA = new EventA();
private void Start()
{
mOnMouseLeftClickEvent.Register(() =>
{
Debug.Log("鼠标左键点击");
}).UnRegisterWhenGameObjectDestroyed(gameObject);
mOnValueChanged.Register(value =>
{
Debug.Log($"值变更:{value}");
}).UnRegisterWhenGameObjectDestroyed(gameObject);
mEventA.Register((a, b) =>
{
Debug.Log($"自定义事件:{a} {b}");
}).UnRegisterWhenGameObjectDestroyed(gameObject);
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
mOnMouseLeftClickEvent.Trigger();
}
if (Input.GetMouseButtonDown(1))
{
mOnValueChanged.Trigger(10);
}
// 鼠标中键
if (Input.GetMouseButtonDown(2))
{
mEventA.Trigger(1,2);
}
}
}
}
// 输出结果:
// 按鼠标左键时,输出:
// 鼠标左键点击
// 按鼠标右键时,输出:
// 值变更:10
// 按鼠标中键时,输出:
// 自定义事件:1 2
基本使用非常简单。
EasyEvent 最多支持三个泛型。
EasyEvent 的优势
EasyEvent 是 C# 委托和事件的替代。
EasyEvent 相比 C# 委托和事件,优势是可以自动注销。
相比 TypeEventSystem,优势是更轻量,大多数情况下不用声明事件类,而且性能更好(接近 C# 委托)。
缺点则是其携带的参数没有名字,需要自己定义名字。
在设计一些通用系统的时候,EasyEvent 会派上用场,比如背包系统、对话系统,TypeEventSystem 是一个非常好的例子。
在一个项目早期做原型验证时,EasyEvent 也会起非常大的作用,QFramework 架构中的事件,其实写起来有点繁琐,而在项目早期快速迭代原型是重点,此时用 EasyEvent 可以获得更快的开发效率,而使用 QFramework 架构中的事件在项目规模更大的时候会发挥很大的作用,它更方便协作更容易维护,也更容易标准化。
好了,关于 EasyEvent 的介绍就到这里。
更多内容
- 转载请注明地址:liangxiegame.com (首发) 微信公众号:凉鞋的笔记
- QFramework 主页:qframework.cn
- QFramework 交流群: 623597263
- QFramework Github 地址: https://github.com/liangxiegame/qframework
- QFramework Gitee 地址:https://gitee.com/liangxiegame/QFramework
- GamePix 独立游戏学院 & Unity 进阶小班地址:https://www.gamepixedu.com/