Delegate (델리게이트)
함수(이벤트)를 저장하고 나중에 호출할 수 있는 객체
함수 포인터를 더 안전하고 편리하게 사용할 수 있도록 만든 언리얼의 이벤트 시스템이다.
왜 사용하는가?
객체끼리 직접 의존하지 않고
특정 이벤트가 발생했을 때 원하는 함수를 실행할 수 있다.
예를 들어
몬스터 사망
↓
경험치 지급
↓
UI 갱신
↓
퀘스트 진행도 증가
몬스터가 직접 모든 시스템을 알 필요가 없다.
델리게이트에 등록된 함수들을 호출하기만 하면 된다.
기본 개념
이벤트 발생
↓
Delegate 실행
↓
등록된 함수 호출
일반 함수 호출
Player->TakeDamage(10);
특정 객체를 알아야 호출 가능
Delegate 사용
OnPlayerDamaged.Broadcast(10);
누가 듣고 있는지 몰라도 됨
등록된 함수들이 자동 실행됨
싱글캐스트 Delegate
하나의 함수만 등록 가능
DECLARE_DELEGATE(FOnAttack);
바인딩
FOnAttack OnAttack;
OnAttack.BindUObject(
this,
&AMyCharacter::Attack
);
실행
OnAttack.Execute();
안전 실행
OnAttack.ExecuteIfBound();
바인딩 여부 확인 후 실행
파라미터 전달
DECLARE_DELEGATE_OneParam(
FOnDamage,
float
);
바인딩
OnDamage.BindUObject(
this,
&AMyCharacter::TakeDamage
);
실행
OnDamage.Execute(50.f);
멀티캐스트 Delegate
여러 함수 등록 가능
DECLARE_MULTICAST_DELEGATE(FOnBossDead);
등록
OnBossDead.AddUObject(
this,
&UMyUI::ShowClearUI
);
OnBossDead.AddUObject(
this,
&UQuestManager::CompleteQuest
);
실행
OnBossDead.Broadcast();
결과
ShowClearUI()
CompleteQuest()
둘 다 실행됨
Dynamic Delegate
블루프린트에서도 사용 가능
선언
DECLARE_DYNAMIC_MULTICAST_DELEGATE(
FOnLevelUp
);
프로퍼티 등록
UPROPERTY(BlueprintAssignable)
FOnLevelUp OnLevelUp;
실행
OnLevelUp.Broadcast();
블루프린트
Bind Event
↓
Event 실행
가능
언리얼에서 자주 보는 예시
버튼 클릭
Button->OnClicked.AddDynamic(
this,
&UMyWidget::OnButtonClicked
);
오버랩
Sphere->OnComponentBeginOverlap
세션 생성 완료
CreateSessionCompleteDelegate
애님 몽타주 종료
MontageEndedDelegate
Delegate 종류
| 종류 | 함수 개수 | 블루프린트 사용 |
|---|---|---|
| Delegate | 1개 | X |
| Multicast Delegate | 여러 개 | X |
| Dynamic Delegate | 1개 | O |
| Dynamic Multicast Delegate | 여러 개 | O |
자주 사용하는 함수
BindUObject
함수 등록
Delegate.BindUObject(
this,
&AMyClass::Func
);
AddUObject
멀티캐스트 등록
Delegate.AddUObject(
this,
&AMyClass::Func
);
AddDynamic
블루프린트용 등록
Delegate.AddDynamic(
this,
&AMyClass::Func
);
Execute
실행
Delegate.Execute();
ExecuteIfBound
등록 여부 확인 후 실행
Delegate.ExecuteIfBound();
Broadcast
멀티캐스트 실행
Delegate.Broadcast();
실제 사용 예시
플레이어 사망
Player
↓
OnPlayerDead.Broadcast()
듣고 있는 객체
UI
GameMode
QuestManager
SoundManager
결과
UI 사망창 출력
게임 종료 체크
퀘스트 진행
사운드 재생
장점
- 객체 간 결합도 감소
- 이벤트 기반 프로그래밍 가능
- 여러 시스템 동시 처리 가능
- 코드 재사용성 증가
- 블루프린트 연동 가능
요약
Delegate = 함수 저장소
Bind/Add = 함수 등록
Execute/Broadcast = 함수 실행
즉,
"어떤 일이 발생했을 때 등록된 함수들을 호출하는 언리얼 이벤트 시스템"
이다.
'언리얼 > 언리얼 학습' 카테고리의 다른 글
| FOnlineSessionSettings (0) | 2026.06.03 |
|---|---|
| FInputModeUIOnly (0) | 2026.06.02 |
| GameInstance (0) | 2026.06.01 |
| GameMode (1) | 2026.06.01 |