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

谢谢

相关推荐
清泓y5 小时前
UE5--VR与AR开发技术
ue5·ar·vr
日月云棠5 小时前
UE5 Lyra Messages 模块深度解析——从一条击杀消息看游戏事件系统的设计哲学
游戏·ue5
日月云棠1 天前
UE5 Lyra Input 模块:从手柄摇杆到技能释放,一条链路如何做到零耦合
ue5
日月云棠4 天前
UE5 Lyra源码分析——Audio_Analysis音频模块全面分析
ue5·音视频
成都渲染101云渲染66664 天前
2026云渲染平台哪个好?建筑、动画、UE5项目选择云渲染的3个关键标准
ue5
清泓y5 天前
UE 物理系统知识分享
面试·ue5·游戏程序
清泓y5 天前
UE移动开发技术面试题
android·面试·ue5·ue4·游戏程序
清泓y5 天前
UE基础知识与引擎架构面试题
面试·架构·ue5·ue4·游戏程序
mengzhi啊7 天前
UE5关卡切换 传统加载(阻塞)vs流式加载(非阻塞)。还有加载关卡3种办法
ue5
电子云与长程纠缠7 天前
UE中使用TGuardValue与TInlineComponentArray数据结构
开发语言·数据结构·学习·ue5·游戏引擎