• 【Unity 框架】QFramework v1.0 使用指南 架构篇:16. 内置工具:EasyEvent | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏


    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 的介绍就到这里。

    更多内容

  • 相关阅读:
    python并发之concurrent.futures
    Twisted 简介
    Python进程、线程、协程的对比
    协程的优点(Python)
    python concurrent.futures
    gevent 协程 使用
    python高性能代码之多线程优化
    python并发编程之多进程、多线程、异步和协程
    Java——动态代理
    NHibernate之旅(14):探索NHibernate中使用视图
  • 原文地址:https://www.cnblogs.com/liangxiegame/p/16798667.html
Copyright © 2020-2023  润新知