Programming/UE4

[UE4]DYNAMIC_MULTICAST_DELEGATE

구리구리882 2022. 6. 3. 15:36
반응형
// button1 : BP에서 Delegate 호출해 BP, C++의 함수를 호출
// button2 : C++에서 Delegate 호출해 BP, C++의 함수를 호출

 

// EventGraph

 
// BP_Func함수는 로그만 출력만 함

 

 

 
// Header파일
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyMulticastTest.generated.h"

// 인자이름 앞에 'F'를 붙여서 네이밍 해야함

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMulticastTest1);
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMulticastTest2);
 
UCLASS()
class PLUGIN_API UMyMulticastTest : public UUserWidget
{
GENERATED_BODY()
public:
UMyMulticastTest(const FObjectInitializer& ObjectInitializer);
 
UPROPERTY(BlueprintAssignable, VisibleAnywhere, BlueprintCallable, Category = "Event")
FMulticastTest1 fMulticast1;
 
UPROPERTY(BlueprintAssignable, VisibleAnywhere, BlueprintCallable, Category = "Event")
FMulticastTest2 fMulticast2;
 
UFUNCTION()
void CNativeFunc1();

 

UFUNCTION()
void CNativeFunc2();
UFUNCTION(BlueprintCallable, Category = "Event")
 
void ClickButton2();
};

 

 

// cpp

#include "MyMulticastTest.h"
UMyMulticastTest::UMyMulticastTest(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
fMulticast1.AddDynamic(this, &UMyMulticastTest::CNativeFunc1);
fMulticast2.AddDynamic(this, &UMyMulticastTest::CNativeFunc2);
}
void UMyMulticastTest::CNativeFunc1()
{
UE_LOG(LogTemp, Warning, TEXT("CNativeFunc1"));
GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::White, TEXT("CNativeFunc1"));
}
void UMyMulticastTest::CNativeFunc2()
{
UE_LOG(LogTemp, Warning, TEXT("CNativeFunc2"));
GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::White, TEXT("CNativeFunc2"));
}
void UMyMulticastTest::ClickButton2()
{

// Delegate 호출 : 등록된 BP 함수와 C++함수를 호출

fMulticast2.Broadcast();
}

 

// 결과

Button1, Button2순서로 눌렀을때 아래와 같이 출력됨

반응형