- UE5에서 Delegate는 객체 간 통신을 처리하기 위해 사용되는 이벤트 / 콜백 시스템 이다.
- Delegate를 사용하면 한 객체에서 특정 이벤트가 발생 했을 때 다른 객체에 알림을 보내거나, 다른 객체의 특정 매서드를 호출할 수 있음.
Delegate
- 이벤트 정의
- Delegate는 특정 이벤트를 정의 함.
- 이 이벤트는 나중에 트리거될 수 있음.
- 함수 바인딩
- 다른 객체가 Delegate에 특정 함수를 바인딩
- Delegate가 트리거되면 바인딩된 함수가 호출
- 이벤트 발생
- Delegate를 트리거하면, Delegate에 바인딩된 모든 함수가 호출됨
Delegate의 3가지 유형
- Single-cast Delegate : 한 번에 하나의 함수만 호출 가능
- Multi-cast Delegate : 여러개의 함수를 바인딩하고 호출 가능
- Dynamic Delegate : 런타임에서 바인딩 / 바인딩 해제 가능하며, Reflection 시스템과 통합되어 Blueprint에서도 사용 가능.
초간단 Delegate 사용 예시
// Single-cast Delegate
DECLARE_DELEGATE(FMyDelegate);
FMyDelegate MyDelegate;
MyDelegate.BindLambda([]() { UE_LOG(LogTemp, Log, TEXT("Single-cast Delegate Triggered!")); });
MyDelegate.Execute();
DECLARE_MULTICAST_DELEGATE(FMyMulticastDelegate);
----------------------------------------------------------
// Multi-cast Delegate
DECLARE_MULTICAST_DELEGATE(FMyMulticastDelegate);
FMyMulticastDelegate MyMulticastDelegate;
MyMulticastDelegate.AddLambda([]() { UE_LOG(LogTemp, Log, TEXT("First function called!")); });
MyMulticastDelegate.AddLambda([]() { UE_LOG(LogTemp, Log, TEXT("Second function called!")); });
MyMulticastDelegate.Broadcast();
Delegate는 보통 언제 사용하는가?
- 이벤트 기반 시스템
- ex) 캐릭터가 적을 처치했을 때 점수를 증가시키거나 HUD를 업데이트 하는 상황.
- UI와 게임플레이 간 통신
- ex) 게임 플레이에서 발생한 이벤트를 HUD와 같은 UI로 전달.
- 입력 처리
- Actor 간 통신
- 플레이어와 NPC간의 상호작용 처리
- ex) NPC와 대화 후 퀘스트 시작.