【Unity 框架】QFramework v1.0 使用指南 工具篇:13. 其他事件工具 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏

这篇具有很好参考价值的文章主要介绍了【Unity 框架】QFramework v1.0 使用指南 工具篇:13. 其他事件工具 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

QFramework 除了支持了 TypeEventSystem、EasyEvent 还支持了 EnumEventSystem、StringEventSystem。

EnumEventSystem

EnumEventSystem 前身是 老版本 QFramework 的 QEventSystem

using UnityEngine;

namespace QFramework
{
	public class EnumEventExample : MonoBehaviour
	{
		#region 事件定义

		public enum TestEvent
		{
			Start,
			TestOne,
			End,
		}

		public enum TestEventB
		{
			Start = TestEvent.End, // 为了保证每个消息 Id 唯一,需要头尾相接
			TestB,
			End,
		}

		#endregion 事件定义
		
		void Start()
		{
			EnumEventSystem.Global.Register(TestEvent.TestOne, OnEvent);
		}

		void OnEvent(int key, params object[] obj)
		{
			switch (key)
			{
				case (int) TestEvent.TestOne:
					Debug.Log(obj[0]);
					break;
			}
		}

		private void Update()
		{
			if (Input.GetMouseButtonDown(0))
			{
				EnumEventSystem.Global.Send(TestEvent.TestOne, "Hello World!");
			}
		}

		private void OnDestroy()
		{
			EnumEventSystem.Global.UnRegister(TestEvent.TestOne, OnEvent);
		}
	}
}

StringEventSystem

StringEventSystem 的前身是,老版本的 MsgDispatcher

using UnityEngine;

namespace QFramework
{
	public class EnumEventExample : MonoBehaviour
	{
		#region 事件定义

		public enum TestEvent
		{
			Start,
			TestOne,
			End,
		}

		public enum TestEventB
		{
			Start = TestEvent.End, // 为了保证每个消息 Id 唯一,需要头尾相接
			TestB,
			End,
		}

		#endregion 事件定义
		
		void Start()
		{
			EnumEventSystem.Global.Register(TestEvent.TestOne, OnEvent);
		}

		void OnEvent(int key, params object[] obj)
		{
			switch (key)
			{
				case (int) TestEvent.TestOne:
					Debug.Log(obj[0]);
					break;
			}
		}

		private void Update()
		{
			if (Input.GetMouseButtonDown(0))
			{
				EnumEventSystem.Global.Send(TestEvent.TestOne, "Hello World!");
			}
		}

		private void OnDestroy()
		{
			EnumEventSystem.Global.UnRegister(TestEvent.TestOne, OnEvent);
		}
	}
}
// 输出结果
// 点击鼠标左键
// Hello World

StringEventSystem

using UnityEngine;

namespace QFramework.Example
{
    public class StringEventSystemExample : MonoBehaviour
    {
        void Start()
        {
            StringEventSystem.Global.Register("TEST_ONE", () =>
            {
                Debug.Log("TEST_ONE");
            }).UnRegisterWhenGameObjectDestroyed(gameObject);
            
            // 事件 + 参数
            StringEventSystem.Global.Register<int>("TEST_TWO", (count) =>
            {
                Debug.Log("TEST_TWO:" + count);

            }).UnRegisterWhenGameObjectDestroyed(gameObject);
        }

        private void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                StringEventSystem.Global.Send("TEST_ONE");
                StringEventSystem.Global.Send("TEST_TWO",10);
                
            }
        }
    }
}

// 输出结果
// 点击鼠标左键
// TEST_ONE
// TEST_TWO:10

对比

  • TypeEventSystem:

    • 事件体定义简洁
    • 比较适合用于设计框架
    • 支持 struct 获得较好内存性能
    • 使用反射,CPU 性能相对比较差
  • EasyEvent

    • 方便、易用、开发效率高
    • CPU 性能、内存性能较好,接近委托
    • 功能有限
    • 比较适合设计通用解决工具,比如通用背包、全局生命周期触发等
    • StringEventSystem、TypeEventSystem 的底层由 EasyEvent 实现
  • EnumEventSystem

    • 使用枚举作为事件 id,比较适合和服务端的 protobuf 或带有消息 id 的长链接通信
    • 性能较好
    • 枚举用于定义消息体有维护成本
  • StringEventSystem

    • 使用字符串作为事件 id,比较适合和其他脚本层通信,比如 Lua、ILRuntime、PlayMaker 等。
    • 性能一般

目前官方推荐使用 TypeEventSystem 和 EasyEvent 这两个工具。

如果要和网络通信则选择用 EnumEventSystem。

如果要和其他脚本层通信选择用 StringEventSystem。文章来源地址https://www.toymoban.com/news/detail-416336.html

更多内容

  • QFramework 主页:qframework.cn
  • QFramework Github 地址: https://github.com/liangxiegame/qframework
  • QFramework Gitee 地址:https://gitee.com/liangxiegame/QFramework

到了这里,关于【Unity 框架】QFramework v1.0 使用指南 工具篇:13. 其他事件工具 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JUnit与Mockito测试框架使用指南

    JUnit是一个用于编写和运行测试的测试框架,是Java语言最流行的单元测试框架之一。 JUnit的作用是帮助开发人员编写高质量的代码。通过JUnit可以快速地自动化测试,减少手动测试成本,提高开发效率。 使用JUnit进行测试通常需要遵循以下步骤: 新建测试类(Test Class) 在测

    2024年02月10日
    浏览(51)
  • 【教程】Unity 官配 JsonUtility 使用指南

    开发平台:Unity 2020 编程平台:Visual Studio 2020 编程语言:CSharp     处理 Json 数据,在目前多元化的 Json 处理插件上显得简单易用。而 JsonUtility 作为 Unity 官方坐镇的 Json 数据处理软件。必然有其存在的原因。   支持数字数据类型: int 、 float 、 double 、 decimal 、 long 包括

    2024年01月21日
    浏览(72)
  • 人工智能 框架 paddlepaddle 飞桨 使用指南& 使用例子 线性回归模型demo 1

    安装过程使用指南线性回归模型 使用例子 本来预想 是安装 到 conda 版本的 11.7的 但是电脑没有gpu 所以 安装过程稍有变动,下面简单讲下  由于想安装11.7版本 py 是3.9 所以虚拟环境名称也是 paddle_env117 检查环境即可 本文档为您介绍 conda 安装方式

    2024年04月15日
    浏览(54)
  • FastAPI 库(Python 的 Web 框架)基本使用指南(二)

    FastAPI 中定义路由的方式主要有两种,一种是使用 FastAPI 应用实例的方法(例如 app.get() ),一种是使用装饰器(例如 @app.get() ),它们的用法和作用略有不同。 方式1:使用 FastAPI 应用实例的方法 app.get() 、 app.post() 等方法用于直接在应用实例上定义路由。 这些方法接受路径

    2024年02月05日
    浏览(46)
  • FastAPI 库(Python 的 Web 框架)基本使用指南(一)

    参考文档: 中文文档 轻松上手Python的Web神器:FastAPI教程 FastAPI 是一个基于 Python 的现代 Web 框架,它具有快速构建高性能 API 的特点。 FastAPI 关键特性: 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。 高效编码:提高功能开发

    2024年02月04日
    浏览(58)
  • 【12】Git工具 协同工作平台使用教程 Gitee使用指南 腾讯工蜂使用指南【Gitee】【腾讯工蜂】【Git】

    tips:少量的git安装和使用教程,更多讲快速使用上手Gitee和工蜂平台      Git - Downloads (git-scm.com) 找到对应操作系统,对应版本,对应的位数   下载后根据需求自己安装,然后用git --version验证是否成功   使用 SSH 密钥可以让你在与 Git 服务器进行通信时,实现更安全的身份

    2024年02月13日
    浏览(49)
  • 安全之剑:深度解析 Apache Shiro 框架原理与使用指南

    在现代软件开发中,安全性一直是至关重要的一个方面。随着网络攻击和数据泄露的不断增加,我们迫切需要一种强大而灵活的安全框架来保护我们的应用。Shiro框架就是这样一把利剑,它能够轻松地集成到你的项目中,为你的应用提供可靠的安全性保护。 Apache Shiro是一个强

    2024年04月09日
    浏览(47)
  • NetAssist网络调试工具使用指南 (附NetAssist工具包)

    1、NetAssist简介 NetAssist网络调试助手,是Windows平台下开发的TCP/IP网络调试工具,集TCP/UDP服务端及客户端于一体,是网络应用开发及调试工作必备的专业工具之一,可以帮助网络应用设计、开发、测试人员检查所开发的网络应用软/硬件产品的数据收发状况,提高开发速度,简

    2024年02月16日
    浏览(72)
  • Git 可视化工具 Fork 使用指南

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/125135486 本文出自【赵彦军的博客】 最近遇到一个新项目,经过数年的积累,大概有 30000 个分支,用可视化工具打开直接卡死。 由于分支实在是太多了,一般的可视化工具,直接卡死,比如 Sourcetree 就直接卡死,测试了

    2024年01月25日
    浏览(60)
  • 【机器学习】模型调参工具:Hyperopt 使用指南

    在机器学习和数据科学领域,模型调参是一个不可避免的任务。为了提高模型的性能,通常需要调整不同的超参数。 常用的调参策略包括: 网格搜索(Grid Search) 在模型中尝试的每种可能的参数组合来工作,这意味着执行整个搜索将需要很长时间,而且计算成本可能会很高。

    2024年01月23日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包