(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)

谢谢

相关推荐
Дерек的学习记录12 小时前
Unreal Engine 5:开关门实现和流程控制
开发语言·学习·ue5
远离UE42 天前
拉格朗日 动力学问题
ue5·图形渲染·图形学·动力学
远离UE46 天前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
七仔啊7 天前
UE5源码下载及编译
ue5
Zhichao_977 天前
【UE5.8 MCP】接入AI大模型
ue5
曼巴UE59 天前
UE 属性同步
网络·c++·ue5
易知微EasyV数据可视化10 天前
UE5中添加 PNG/TIF 到 Cesium 地球表面方案
经验分享·ue5·数字孪生
GR9010 天前
UE5 SetActorLocation背后发生了什么
ue5
成都渲染101云渲染666612 天前
云渲染怎么用?从项目准备到提交出图,3ds Max、VRay、UE5 实用教程
3d·ue5
directx3d_beginner15 天前
42,将移向指定位置改为c++
ue5