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순서로 눌렀을때 아래와 같이 출력됨
반응형