1. Delegate
1-1. Delegate란?
- 언리얼 엔진에서 Delegate는 이벤트와 콜백 함수를 연결해주는 기능이다.
- 특정 이벤트가 발생했을 때 미리 등록한 함수를 자동으로 호출할 수 있어, 이벤트 기반 프로그래밍을 가능하게 한다.
1-1. Delegate 종류
| 유형 | 설명 |
| Delegate | 단일 함수 바인딩 |
| Multicast Delegate | 다수 함수 바인딩 |
| Dynamic Multicast Delegate | 리플렉션, 블루프린트 지원, 직렬화 가능, 일반 델리게이트보다는 느림 |
// Delegate
DECLARE_DELEGATE(DelegateName); // DelegateName은 F로 시작, ex) FOnClickedEvent
// -> void Function()
DECLARE_DELEGATE_OneParam(DelegateName, Param1Type);
// -> void Function(Param1)
DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
// -> void Function(Param1, Param2)
DECLARE_DELEGATE_<Num>Params(DelegateName, Param1Type, Param2Type, ...)
// -> void Function(Param1, Param2, ...)
DECLARE_DELEGATE_RetVal(RetValType, DelegateName)
// -> <RetVal> Function()
DECLARE_DELEGATE_RetVal_OneParam(RetValType, DelegateName, Param1Type)
// -> <RetVal> Function(Param1)
// DECLARE_DELEGATE_RetVal_이하 동일
// Multicast Delegate
DECLARE_MULTICAST_DELEGATE(DelegateName);
// 이하 동일...
// Dynamic Delegate
DECLARE_DYNAMIC_DELEGATE_RetVal_ThreeParam(RetValType, DelegateName, Param1Type, Param2Name, Param2Type, Param2Name, Param3Type, Param3Name);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type, Param1Name);
// 사용법 기본 Delegate와 동일...
1-2. Delegate 선언방법
// Delegate
DECLARE_DELEGATE(FOnSimpleEvent);
DECLARE_DELEGATE_OneParam(FOnItemSelected, int32);
// Multicast Delegate
DECLARE_MULTICAST_DELEGATE(FOnDamageEvent);
// Dynamic Multicast Delegate
DECLARE_DYNAMIC_DELEGATE_RetVal_ThreeParams(int32, FDynamicDelegateRetThreeParam, float, floatName1, float, floatNmae2, int32, intName1);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSlotClicked, int32, Index);
1-3. Delegate에 함수 바인딩
// 일반 Delegate
FOnItemSelected OnItemSelected;
OnItemSelected.BindRaw(this, &UMyWidget::HandleItemSelected);
// Multicast Delegate
FOnDamageEvent OnDamageEvent;
OnDamageEvent.AddRaw(this, &AEnemy::PlayHitEffect);
// Dynamic Delegate (리턴값 + 파라미터 3개)
UPROPERTY()
FDynamicDelegateRetThreeParam Delegate;
Delegate.BindDynamic(this, &AMyActor::CalcResult); // UFUNCTION 필요
// Dynamic Multicast Delegate
UPROPERTY()
FOnSlotClicked OnSlotClicked;
OnSlotClicked.AddDynamic(this, &UInventoryUI::HandleSlotClicked); // UFUNCTION 필요
1-4. Delegate 호출
// Delegate
if (OnItemSelected.IsBound())
{
OnItemSelected.Execute(2); // int32 인덱스 전달
}
// Multicast Delegate
OnDamageEvent.Broadcast(); // 등록된 모든 함수 실행
// Dynamic Delegate
if (Delegate.IsBound())
{
int32 Result = Delegate.Execute(1.0f, 2.0f, 5); // 파라미터 전달
}
// Dynamic Multicast Delegate
OnSlotClicked.Broadcast(3); // 인덱스 3번 슬롯 클릭 이벤트 알림
2. Delegate 기능을 활용한 인벤토리 아이템 칸
- 인벤토리 아이템 칸을 UButton을 상속받는 커스텀 클래스 UC_InventoryButton을 구현하고, 각 버튼마다 고유한 인덱스를 부여했다.
- 이후 클릭 이벤트가 발생하면, 버튼 내부에서 별도로 정의한 델리게이트를 통해 인덱스를 외부로 전달하도록 구성했다.
Unreal 5 구현 - 인벤토리 시스템
- 아이템은 데이터 테이블로 관리하여, 쉽게 수정하고 추가할 수 있도록 했다. - 인벤토리의 각 아이템 칸은 별도의 Button 위젯을 정의하여 동작을 구현했다.1. 구현 기능 1-1. 인벤토리 - 인벤토리
gyro-code-game.tistory.com
'Programming > Unreal 5 정보, 기능' 카테고리의 다른 글
| Unreal 5 기능 - LineTrace (5) | 2025.06.27 |
|---|
