继承于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();`: 从内存中移除当前对象。这是一种在异步操作完成后释放实例内存的常用做法。
*/