自定义蓝图异步节点.md 1.4 KB

异步节点

自定义蓝图异步节点,最简单的方式是继承 UBlueprintAsyncActionBase

使用 UFUNCTION 定义一个 BlueprintCallablestatic 函数作为入口函数

使用 DELETAGE 定义回调事件,作为出口节点,事件的参数就是节点的返回值

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRequestGPUInfoSuccess, int, Level);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRequestGPUInfoFail, int, Level);

UCLASS(meta = (HideThen = true))
class GPUINFO_API UGetGpuInfo : public UBlueprintAsyncActionBase
{
	GENERATED_BODY()

public:
	UPROPERTY(BlueprintAssignable)
	FOnRequestGPUInfoSuccess OnSuccess;
	
	UPROPERTY(BlueprintAssignable)
	FOnRequestGPUInfoFail OnFail;
	
	UFUNCTION(BlueprintCallable, meta=( BlueprintInternalUseOnly="true", WorldContext = "InWOrldContext", DisplayName = "AsyncGetGpuInfo"))
	static UGetGpuInfo* CreateAsyncNode(UObject* InWorldContext, const FString& URL);
}

UCLASS(meta = (HideThen = true)) 隐藏了默认的 Then 引脚

UGetGpuInfo* UGetGpuInfo::CreateAsyncNode(UObject* InWorldContext, const FString& URL)
{
	UGetGpuInfo* DownloadTask = NewObject<UGetGpuInfo>();
	DownloadTask->Start(URL);
	return DownloadTask;
}

直接在 static 入口函数中创建对象,然后执行对应启动函数即可,在合适的时候 Broadcast 对应的事件即可