Single Cast Delgate
Multi Cast Delegate
Dynamic Delegate
// 1. Delegate 정의 (Single-cast)
DECLARE_DELEGATE(FMyDelegate);
// 2. Delegate 선언
FMyDelegate MyDelegate;
// 3. Delegate에 바인딩할 함수 정의
void MyFunction()
{
UE_LOG(LogTemp, Warning, TEXT("Delegate Function Called!"));
}
// 4. Delegate에 함수 바인딩
MyDelegate.BindStatic(&MyFunction);
// 멤버 함수의 경우 BindUObject 사용
MyDelegate.BindUObject(this, &ThisClass::MyFunc);
// 5. Delegate 호출
if (MyDelegate.IsBound()) // Delegate가 바인딩되었는지 확인
{
MyDelegate.Execute();
}
// 1. Multi-cast Delegate 정의
DECLARE_MULTICAST_DELEGATE(FMyMultiCastDelegate);
// 2. Multi-cast Delegate 선언
FMyMultiCastDelegate MyMultiCastDelegate;
// 3. Delegate에 바인딩할 함수 정의
void MyMultiCastFunction1()
{
UE_LOG(LogTemp, Warning, TEXT("Function 1 Called!"));
}
void MyMultiCastFunction2()
{
UE_LOG(LogTemp, Warning, TEXT("Function 2 Called!"));
}
// 4. Delegate에 함수 바인딩
MyMultiCastDelegate.AddStatic(&MyMultiCastFunction1);
MyMultiCastDelegate.AddStatic(&MyMultiCastFunction2);
// 5. Delegate 호출
MyMultiCastDelegate.Broadcast();
// 1. Dynamic Delegate 정의
DECLARE_DYNAMIC_DELEGATE(FMyDynamicDelegate);
// 2. 클래스에 Delegate 선언
class AMyActor : public AActor
{
GENERATED_BODY()
public:
FMyDynamicDelegate MyDynamicDelegate;
// 함수 선언, Dynamic Delegate와 연결될 함수는 UFUNCTION으로 선언해야 합니다.
UFUNCTION()
void OnMyDynamicEvent();
};
// 3. Delegate에 바인딩할 함수 정의
void AMyActor::OnMyDynamicEvent()
{
UE_LOG(LogTemp, Warning, TEXT("Dynamic Delegate Function Called!"));
}
// 4. Delegate에 함수 바인딩
void AMyActor::BeginPlay()
{
Super::BeginPlay();
// Delegate에 동적으로 함수 바인딩
MyDynamicDelegate.BindDynamic(this, &AMyActor::OnMyDynamicEvent);
// Delegate 호출
if (MyDynamicDelegate.IsBound())
{
MyDynamicDelegate.Execute();
}
}
// 1. Dynamic Multi-cast Delegate 정의
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMyDynamicMultiCastDelegate);
// 2. 클래스에 Delegate 선언
class AMyActor : public AActor
{
GENERATED_BODY()
public:
// Dynamic Multi-cast Delegate 선언
UPROPERTY(BlueprintAssignable) // 블루프린트에서도 바인딩할 수 있도록 설정
FMyDynamicMultiCastDelegate MyDynamicMultiCastDelegate;
// 바인딩할 함수 선언
UFUNCTION()
void OnMyDynamicEvent1();
UFUNCTION()
void OnMyDynamicEvent2();
};
// 3. Delegate에 바인딩할 함수 정의
void AMyActor::OnMyDynamicEvent1()
{
UE_LOG(LogTemp, Warning, TEXT("Dynamic Multi-cast Delegate Function 1 Called!"));
}
void AMyActor::OnMyDynamicEvent2()
{
UE_LOG(LogTemp, Warning, TEXT("Dynamic Multi-cast Delegate Function 2 Called!"));
}
// 4. Delegate에 함수 바인딩
void AMyActor::BeginPlay()
{
Super::BeginPlay();
// Delegate에 동적으로 함수 바인딩
MyDynamicMultiCastDelegate.AddDynamic(this, &AMyActor::OnMyDynamicEvent1);
MyDynamicMultiCastDelegate.AddDynamic(this, &AMyActor::OnMyDynamicEvent2);
// Delegate 호출
MyDynamicMultiCastDelegate.Broadcast();
}