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

UE5自定义蓝图节点(二)

继承于UBlueprintAsyncActionBase的类,异步输出节点的实现方法,代码测试正常

.h

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Kismet/BlueprintAsyncActionBase.h"
#include "MyClassAsyncActionBase.generated.h"/*** */DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FResponsDeleget,int32,ID,FString,Data);UCLASS()
class NEWCOUSTNODE_API UMyClassAsyncActionBase : public UBlueprintAsyncActionBase
{GENERATED_BODY()public:UPROPERTY(BlueprintAssignable)FResponsDeleget Onsuccess;UPROPERTY(BlueprintAssignable)FResponsDeleget OnFail;UPROPERTY()int temp = 0;void isEqual();UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))static UMyClassAsyncActionBase* MyClassAsyncActionBase(const int ID);virtual void Activate() override;
};
/*
这是一个 Unreal Engine 项目的头文件(.h 文件),其中包含了一个自定义的蓝图异步操作基类 `UMyClassAsyncActionBase`。1. `#pragma once`: 这是预处理指令,确保该头文件只会被编译一次,以防止重复包含。2. `#include "CoreMinimal.h"`: 这是 Unreal Engine 的核心头文件,它包含了一些常用的基本功能和宏定义。3. `#include "Kismet/BlueprintAsyncActionBase.h"`: 这是 Unreal Engine 提供的蓝图异步操作基类的头文件,`UMyClassAsyncActionBase` 将继承自它,以便在蓝图中实现异步功能。4. `#include "MyClassAsyncActionBase.generated.h"`: 这是一个自动生成的文件,其中包含了 `UMyClassAsyncActionBase` 类的声明,它由 Unreal Engine 的蓝图系统根据以下内容生成。5. `DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FResponsDeleget,int32,ID,FString,Data);`: 这是一个声明了两个参数的动态多播代理(Delegate),称为 `FResponsDeleget`。它有两个参数:一个整数类型的 `ID` 和一个字符串类型的 `Data`。这个代理用于在异步操作完成时触发并传递结果。6. `UCLASS()`: 这是一个宏,用于标记 `UMyClassAsyncActionBase` 类为 Unreal Engine 的蓝图类。通过使用这个宏,我们可以在蓝图中继承这个类,并在蓝图中实现自定义的异步逻辑。7. `GENERATED_BODY()`: 这是一个宏,用于告诉 Unreal Engine 在这个类中生成相关的代码。这包括成员变量、函数等的实现。8. `UPROPERTY(BlueprintAssignable)`: 这是一个 Unreal Engine 的宏,用于声明一个属性,使其在蓝图中可见并允许绑定事件。9. `FResponsDeleget Onsuccess;`: 这是一个声明了代理 `FResponsDeleget` 的成员变量 `Onsuccess`,用于在异步操作成功时触发事件。10. `FResponsDeleget OnFail;`: 这是一个声明了代理 `FResponsDeleget` 的成员变量 `OnFail`,用于在异步操作失败时触发事件。11. `UPROPERTY()`: 这是 Unreal Engine 的宏,用于声明一个属性(成员变量)。12. `int temp = 0;`: 这是一个整型成员变量 `temp` 的初始化,初始值为 0。13. `void isEqual();`: 这是一个未实现的函数声明,可能是作者计划在后续实现类中的功能。14. `UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))`: 这是一个宏,用于声明一个蓝图可调用的函数,它标记了函数 `MyClassAsyncActionBase` 为蓝图中的可用函数。15. `static UMyClassAsyncActionBase* MyClassAsyncActionBase(const int ID);`: 这是一个静态函数声明,用于创建并返回 `UMyClassAsyncActionBase` 类的实例。函数参数为整数类型的 `ID`。16. `virtual void Activate() override;`: 这是 Unreal Engine 的蓝图异步操作基类中的虚函数,将在子类中被实现,用于启动异步操作。
*/

.cpp

// Fill out your copyright notice in the Description page of Project Settings.#include "MyClassAsyncActionBase.h"UMyClassAsyncActionBase* UMyClassAsyncActionBase::MyClassAsyncActionBase(const int ID)
{UMyClassAsyncActionBase* NewFeroxNod = NewObject<UMyClassAsyncActionBase>();NewFeroxNod->temp = ID;return NewFeroxNod;}void UMyClassAsyncActionBase::Activate()
{isEqual();}
void UMyClassAsyncActionBase::isEqual()
{if (temp>0){Onsuccess.Broadcast(temp,"success! from c++");}else{OnFail.Broadcast(-228,"Fail");}RemoveFromRoot();
}/*
这是 Unreal Engine 项目中 `MyClassAsyncActionBase.cpp` 文件的内容,它实现了之前在头文件中声明的 `UMyClassAsyncActionBase` 类的成员函数。1. `#include "MyClassAsyncActionBase.h"`: 这是包含了头文件 `MyClassAsyncActionBase.h`,以便在这个源文件中使用 `UMyClassAsyncActionBase` 类的定义和成员函数。2. `UMyClassAsyncActionBase* UMyClassAsyncActionBase::MyClassAsyncActionBase(const int ID)`: 这是静态函数 `MyClassAsyncActionBase` 的实现。它创建并返回 `UMyClassAsyncActionBase` 类的实例。函数参数 `ID` 是一个整数,用于初始化实例的 `temp` 成员变量。3. `UMyClassAsyncActionBase* NewFeroxNod = NewObject<UMyClassAsyncActionBase>();`: 在内存中创建一个新的 `UMyClassAsyncActionBase` 类的实例。4. `NewFeroxNod->temp = ID;`: 将参数 `ID` 的值赋给新实例的 `temp` 成员变量。5. `return NewFeroxNod;`: 返回创建的新实例。6. `void UMyClassAsyncActionBase::Activate()`: 这是在蓝图异步操作基类中定义的虚函数 `Activate` 的实现。它在异步操作开始时被调用。7. `isEqual();`: 调用成员函数 `isEqual()`,执行异步操作逻辑。8. `void UMyClassAsyncActionBase::isEqual()`: 这是自定义的成员函数 `isEqual()` 的实现。在这个函数中,根据 `temp` 成员变量的值进行条件判断。9. `if (temp>0)`: 如果 `temp` 大于 0,表示异步操作成功。10. `Onsuccess.Broadcast(temp,"success! from c++");`: 触发 `Onsuccess` 代理,将 `temp` 的值和一个成功的字符串传递给绑定了这个事件的蓝图。11. `else`: 如果 `temp` 小于等于 0,表示异步操作失败。12. `OnFail.Broadcast(-228,"Fail");`: 触发 `OnFail` 代理,将一个特定的错误码和字符串传递给绑定了这个事件的蓝图。13. `RemoveFromRoot();`: 从内存中移除当前对象。这是一种在异步操作完成后释放实例内存的常用做法。
*/

http://www.lryc.cn/news/98045.html

相关文章:

  • Bean容器中的ThreadPoolTaskExecutor需要手动关闭吗
  • Redis学习路线(3)——Redis的Java客户端
  • 行车遥控接线图
  • 区块链实验室(11) - PBFT耗时与流量特征
  • Shell编程基础(三)环境变量 位置变量 系统内置变量
  • P5718 【深基4.例2】找最小值
  • C++——STL容器之list链表的讲解
  • 使用for循环输出左上三角、右上三角、左下三角、右下三角、上下三角
  • CAXA中.exb或者.dwg文件保存为PDF
  • 华为刷题:HJ3明明随机数
  • ENVI提取NDVI与植被覆盖度估算
  • Arm 扩大开源合作伙伴关系,加强投入开放协作
  • Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
  • 互联网搜索的学习笔记
  • vue事件修饰符
  • 【安全】web中的常见编码浅析浏览器解析机制
  • Ceph概述、准备ceph部署环境、cephadm概述、安装Ceph集群、ceph块存储、存储池、rbd镜像管理、ceph客户端配置
  • python selenium爬虫自动登录实例
  • el-cascader 数据的回显
  • Java 版 spring cloud +spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单
  • 即时通信的方法和webSocket的具体使用
  • HTML 速查列表
  • Hadoop集成Hive
  • MyBatis查询数据库
  • RVM问题记录 - Error running ‘__rvm_make -j10‘
  • VIS for AI :ConvNetJS
  • 【Python入门系列】第二十篇:Python区块链和加密货币
  • MySQL 服务器的调优策略
  • Educational Codeforces Round 152 (Rated for Div. 2)
  • CSPM难度大吗?对比pmp怎么样?