Ver código fonte

feat: 添加异步节点

nicetry12138 1 ano atrás
pai
commit
0a9d50c083

BIN
UE5/引擎开发记录/Image/001.png


+ 44 - 0
UE5/引擎开发记录/README.md

@@ -125,3 +125,47 @@ DEFINE_FUNCTION(UJsonBlueprintFunctionLibrary::execGetField)
 - `P_NATIVE_BEGIN` 和 `P_NATIVE_END` : 宏包裹着真正执行该函数功能的被调用函数,若是泛型蓝图节点,此处调用该函数的泛型版本(泛型函数)
 - `RESULT_PARAM`: 表示函数返回值
 
+## 异步节点
+
+自定义蓝图异步节点,最简单的方式是继承 `UBlueprintAsyncActionBase`
+
+使用 `UFUNCTION` 定义一个 `BlueprintCallable` 的 `static` 函数作为入口函数
+
+使用 `DELETAGE` 定义回调事件,作为出口节点,事件的参数就是节点的返回值
+
+```cpp
+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);
+}
+```
+
+![](Image/001.png)
+
+> `UCLASS(meta = (HideThen = true))` 隐藏了默认的 `Then` 引脚
+
+```cpp
+UGetGpuInfo* UGetGpuInfo::CreateAsyncNode(UObject* InWorldContext, const FString& URL)
+{
+	UGetGpuInfo* DownloadTask = NewObject<UGetGpuInfo>();
+	DownloadTask->Start(URL);
+	return DownloadTask;
+}
+```
+
+直接在 `static` 入口函数中创建对象,然后执行对应启动函数即可,在合适的时候 `Broadcast` 对应的事件即可
+