UE5自定义蓝图节点(二)

news/2025/2/13 0:17:14/

继承于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.ppmy.cn/news/979782.html

相关文章

Python基础-列表(list)和元组(tuple)

Python包含6种内建的序列&#xff1a;列表&#xff0c;元组&#xff0c;字符串&#xff0c;Unicode字符串&#xff0c;buffer对象&#xff0c;xrange对象&#xff0c;本文讨论列表和元组。 1.列表可以修改&#xff0c;元组则不能修改。 2.几乎在所有的情况下&#xff0c;列表…

被泼冷水后,谁能超越微服务?

历史总会重演。一切刚过去的&#xff0c;又会被重新提起。开源项目Codename One的联合创始人Shai&#xff0c;曾是Sun Microsystems开源LWUIT项目的共同作者&#xff0c;参与了无数开源项目。作为最早一批Java开发者&#xff0c;最近感慨道&#xff1a;单体&#xff0c;又回来了…

Idea 开启 lombook 注解插件处理器

Idea 开启 lombook 注解插件处理器 方便编译器识别 勾选 Enable annotation processing

java项目之人事管理系统(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的人事管理系统。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

Android 任务调度 WorkManager 和 JobScheduler 的使用

在过去&#xff0c;常常使用后台Service来执行定时任务。虽然Service是执行后台任务的一种方式&#xff0c;但自Android 8.0&#xff08;API级别26&#xff09;以后&#xff0c;Google推荐使用更高效和系统友好的方式来执行定时任务&#xff0c;例如JobScheduler和WorkManager。…

Java中的LRU缓存算法

Java中的LRU缓存算法 LRU&#xff08;Least Recently Used&#xff09;缓存算法是一种常见的缓存淘汰算法&#xff0c;用于在缓存空间不足时决定哪些数据需要被淘汰&#xff0c;以便为新的数据腾出空间。LRU算法的基本思想是&#xff1a;当缓存满时&#xff0c;淘汰最近最少使…

web-xss

HTML的< >&amp;&quot;©分别是<&#xff0c;>&#xff0c;&&#xff0c;"&#xff0c;©;的转义字符 XML只有5个转义符: < >&amp; &quot; &apos; HTTP请求中&#xff0c;Referer是header的一部分&#xff0c;当浏览器…

ICASSP 2023说话人识别方向论文合集(一)

ICASSP (International Conference on Acoustics, Speech and Signal Processing) 即国际声学、语音与信号处理会议&#xff0c;是IEEE主办的全世界最大、最全面的信号处理及其应用方面的顶级会议&#xff0c;在国际上享有盛誉并具有广泛的学术影响力。 今年入选 ICASSP 2023 …