(40)UE 里从 C++到蓝图的异步节点函数,继承类 UBlueprintAsyncActionBase

(65)


bash 复制代码
蓝图调用静态函数(如 MyAsyncAction::DoSomething())
        │
        ▼
  NewObject 创建 UObject 实例
        │
        ▼
  Activate() 被调用 ← 你在这里写异步逻辑(开线程/AsyncTask/Tick等)
        │
        ▼
  完成后 Broadcast 委托
        │
        ▼
  蓝图中 Exec 引脚触发,继续往下走

规范写法(必须这么写才能被识别)

cpp 复制代码
// .h
UCLASS()
class UMyAsyncAction : public UBlueprintAsyncActionBase
{
    GENERATED_BODY()

public:
    // ① 静态工厂函数------必须 static + BlueprintCallable
    UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
    static UMyAsyncAction* DoSomething(UObject* WorldContextObject, float Delay);

    // ② 委托------必须 BlueprintAssignable,蓝图中会变成 Exec 引脚
    UPROPERTY(BlueprintAssignable)
    FMyDelegate OnCompleted;

    // ③ 重写 Activate------异步逻辑入口
    virtual void Activate() override;

private:
    float InternalDelay;
};

++ 以及

cpp 复制代码
// .cpp
UMyAsyncAction* UMyAsyncAction::DoSomething(UObject* WorldContextObject, float Delay)
{
    UMyAsyncAction* Node = NewObject<UMyAsyncAction>();
    Node->InternalDelay = Delay;
    Node->RegisterWithGameInstance(); // 防止被 GC 回收
    return Node;
}

void UMyAsyncAction::Activate()
{
    // 异步执行,不阻塞蓝图
    AsyncTask(ENamedThreads::AnyBackgroundThreadNormalTask, [this]()
    {
        FPlatformProcess::Sleep(InternalDelay);

        // 回到游戏线程广播结果
        AsyncTask(ENamedThreads::GameThread, [this]()
        {
            OnCompleted.Broadcast();
            SetReadyToDestroy(); // 标记可回收
        });
    });
}

++ 蓝图中长什么样

bash 复制代码
[Exec In] ──→ [DoSomething] ──→ [Then] (Exec 输出)
                  │
                  └──→ [Completed] (委托事件,可绑定)

(66)

谢谢

相关推荐
远离UE41 天前
UE5 Niagara LightWeight Emitter
ue5
StarTechnology2 天前
UE5云渲染管理平台-支持私有化部署Linux-Windows国产化适配
ue5·webui·webbrowser
平行云2 天前
实时云渲染信创架构解析:从GPU池化到全栈适配的技术演进
linux·unity·docker·ue5·webgl·数字孪生·实时云渲染
远离UE44 天前
UE5 高性能 实时 玻璃破碎系统
ue5
远离UE44 天前
UE5 多线程 与 异步 并行
ue5
日月云棠8 天前
UE5源码分析之Editor——ConfigEditor模块全面分析
ue5
日月云棠8 天前
UE5源码分析之Editor——CommonMenuExtensions插件全面分析
ue5
日月云棠8 天前
UE5源码分析之Editor——ClothingSystemEditorInterface模块全面分析
ue5
日月云棠8 天前
UE5源码分析之Editor——ClothPainter插件全面分析
ue5
[苦行僧]8 天前
ue5 异步 Task
ue5