본문 바로가기

Unreal 5 기능 - Delegate

@코야딩구2025. 6. 24. 18:14

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
목차