在C++中增加事件调度器(自定义广播)

来源:互联网 发布:淘宝网新店有支持吗 编辑:程序博客网 时间:2024/06/07 20:09

1.新建事件调度器
MyActor.h

#pragma once#include "GameFramework/Actor.h"#include "MyActor.generated.h"DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDelegate, AActor*, broa);UCLASS()class STORY_API AMyActor : public AActor{    GENERATED_BODY()public:     // Sets default values for this actor's properties    AMyActor();    // Called when the game starts or when spawned    virtual void BeginPlay() override;    // Called every frame    virtual void Tick( float DeltaSeconds ) override;    UPROPERTY(BlueprintAssignable)    FDelegate xDelegate;};

MActor.cpp(替换story.h为你的项目或者模块名称)

#include "story.h"#include "MyActor.h"// Sets default valuesAMyActor::AMyActor(){    // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.    PrimaryActorTick.bCanEverTick = true;}// Called when the game starts or when spawnedvoid AMyActor::BeginPlay(){    Super::BeginPlay();    if (GEngine)    {        GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Green, FString("Actor::BeginPlay broadcast"));    }    xDelegate.Broadcast(this);}// Called every framevoid AMyActor::Tick( float DeltaTime ){    Super::Tick( DeltaTime );}

2.编译并在关卡中添加Actor后,在蓝图关卡增加事件绑定
这里写图片描述
3.运行查看效果(执行顺序:关卡蓝图->Actor)
这里写图片描述
另:无参的事件调度器声明为

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDelegate2);
0 0