当前位置: 首页 > news >正文

[UE C++]实现自己的事件分发机制

前言

        UE当中有自己的事件分发机制实现方式。在蓝图中,通过左下角自带的事件分发器来实现。在UEC++中,可以通过委托(Delegate),将一个函数指针或成员函数指针绑定到一个特定的对象,并在需要时调用该函数或方法来实现事件分发。本文依照事件分发机制的核心理念,创建一个自己的事件分发器。

正文

        首先核心框架由这两类构成:EventManager、EventInterface。在EventManager中,管理着所有的订阅者以及订阅的事件。

订阅事件全局变量

        

        利用Map存储事件及其对应所有订阅者,因为Map可以将任何基本类型(包括STL容器)映射到任何基本类型。因此键用FString存储事件名,值用TArray<UObject*>存储其订阅者。

回调函数接口

        

        用BlueprintNativeEvent修饰,是回调函数既可以在C++中实现,也可在蓝图中实现。

核心函数方法

一、AddEventListener

        

        AddEventListener用于添加订阅者,函数接收两个参数,一个是订阅事件的名称,另一个是订阅者的指针。首先应当对参数进行安全校验,判断订阅者是否为空,以及是否被垃圾回收机制标记为无效,其次还应当实现订阅的接口函数。

        

       在通过校验后,在AllListener中查找是否已有该事件,若有则直接在其下添加该订阅者,否则重新添加一个该事件的Array存储订阅者。

        

二、RemoveEventListener

        

        RemoveEventListener用于删除事件中的订阅者。由于Remove不需要判别订阅者的有效性,因此只需要对事件名做判断即可。

        

三、DispatchEvent

        

        函数接收两个参数,第一个是事件名,第二个是事件需要传入的数据,以UObject作为参数则方便转换为实际参数类型。先寻找是否有该事件并取出其中的订阅者序列,若是没有则直接返回报错信息。

        

        若是有该事件,首先对订阅者序列进行遍历,检查是否有已经被垃圾回收标记为无效的对象,有则将其删除。然后正常进行事件分发,利用UFunction*检查是否有实现回调的函数,若回调函数无效则进行错误信息处理,正常则调用函数。ProcessEvent是UEC++底层中的可用于扩展事件处理逻辑的一个函数。

四、NewAsset

        

        该函数主要用于创建数据时使用。

        

实际使用样例

        这里假设在开发中,回调函数所需的参数为一个int型,那么创建一个类存储一个int型的数据(只要继承自UObject的子类都可)。

        

        在被订阅者内,先利用工具类里的创建一个资源,然后转为所需数据类型的对象,然后对其中的数据赋值,然后进行事件分发的调用。

        

        然后在订阅者中利用工具类添加事件订阅,然后实现接口内的函数(订阅者需要继承接口类)。

        

结尾

        自此完成了自定义事件分发机制的工具类以及使用。

相关文章:

  • Swift系列02-Swift 数据类型系统与内存模型
  • thinkphp5.1 在fetch模版就超时
  • Spring AI简单使用
  • 【JAVA架构师成长之路】【Spring生态】第1集:Spring生态核心
  • 使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输
  • 在 macOS 上使用 CLion 进行 Google Test 单元测试
  • Van Uploader解决Android11及以下系统上传图片无反应问题
  • 【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】
  • Web3 与跨链技术:如何实现不同区块链的互操作性
  • Language Agent Tree Search (1)
  • 春招中护网面试题库
  • Github 2025-03-06 Go开源项目日报 Top10
  • C语言:怎样将一个结构体数据全部清零
  • 【AI深度学习基础】Pandas完全指南进阶篇:解锁高效数据处理高阶技能 (含完整代码)
  • 【VBA】WPS/PPT设置标题字体
  • 50.日常算法
  • 算法进阶——枚举
  • Java-servlet(三)Java-servlet-Web环境搭建(下)详细讲解利用maven和tomcat搭建Java-servlet环境
  • Python 错误和异常处理:守护程序的稳定运行
  • 无耳 Solon v3.1.0 全新发布(可全面替换 Java Spring 生态)
  • 浙江建设信息网港/核心关键词如何优化
  • 域名服务器ip/网站优化排名提升
  • 专门做实习计算机项目的网站平台/免费推广产品的平台
  • 池州网站建设公司/企业营销策划论文
  • 上海网站开发外包公司/广告推广免费
  • 佛山建设企业网站/舆情信息在哪里找