📌 개요
델리게이트는 이벤트 기반 프로그래밍을 구현할 수 있도록 해주는 기능으로,
특정 이벤트가 발생했을 때 특정 함수를 실행하도록 바인딩하는 역할을 한다.
델리게이트는 단일, 멀티, 다이나믹으로 구분할 수 있다.
📌 단일 델리게이트
✔ 특징
- 한 번에 한 개의 함수만 바인딩 가능.
- 빠른 성능을 제공하며, 블루프린트에서는 사용할 수 없음.
클래스 | 작성 | 작성 위치 | 용도 |
델리게이트를 소지한 클래스 |
DECLARE_DELEGATE(FMyDelegate); | 헤더 전역으로 작성 |
델리게이트 정의 |
FMyDelegate MyDelegate; | 헤더 클래스 안 public |
델리게이트 변수 선언 | |
FMyDelegate.Unbind(); | CPP 클래스 소멸 시(EndPlay 등) |
바인드된 함수 제거 | |
FMyDelegate.IsBound() | CPP BeginPlay (바인드하기 전에 사용) |
바인드된 함수가 있는지 ( 에러 방지 ) |
|
FMyDelegate.Execute() | CPP 델리게이트 함수를 호출할 함수에 작성 |
델리게이트에 등록된 함수 호출 |
|
델리게이트에 등록할 함수를 지닌 클래스 | VariableOfClassHavingDelegate-> FMyDelegate.BindUFunction( this, FName("FunctionRegisteringToDelegate" ); |
CPP BeginPlay |
델리게이트에 함수 등록 (바인드, 한번만 가능) |
파라미터 개수에 따라 매크로는 달라짐( DECLARE_DELEGATE_OneParam(FMyDelegate, int32);)
📌 멀티캐스트 델리게이트
✔ 특징
- 여러 개의 함수 바인딩
- 이벤트 시스템에서 여러 개의 리스너를 한 번에 호출할 때 유용함
클래스 | 작성 | 작성 위치 | 용도 |
델리게이트를 소지한 클래스 |
DECLARE_MULTICAST_DELEGATE(FMyMultiDelegate); | 헤더 전역으로 작성 |
델리게이트 정의 |
FMyMultiDelegate MyDelegate; | 헤더 클래스 안 public |
델리게이트 변수 선언 | |
MyDelegate.Clear(); | CPP 클래스 소멸 시 (EndPlay 등) |
바인드된 함수 제거 | |
MyDelegate.Broadcst(); | CPP 델리게이트 함수들을 호출할 함수에 작성 |
델리게이트에 등록된 함수들 호출 |
|
델리게이트에 등록할 함수를 지닌 클래스 | MyDelegate.IsBound() | CPP BeginPlay (바인드하기 전에 사용) |
바인드된 함수가 있는지 ( 에러 방지 ) |
VariableOfClassHavingDelegate-> FMyDelegate.AddUFunction( this, FName("FunctionRegisteringToDelegate" ); |
CPP BeginPlay |
델리게이트에 함수 등록 (바인드, 여러개 가능) |
📌 다이나믹 델리게이트
✔ 특징
- UPROPERTY매크로를 통해 작성한 델리게이트에 블루프린트로 바인딩 가능(블루프린트 디스패처와 유사)
- 동적으로 바인딩할 수 있음 (AddDynamic() 사용)
- 하지만 런타임에 함수 이름을 찾아 실행하기 때문에 느림
- UFUNCTION()을 사용한 함수만 바인딩할 수 있음
클래스 | 작성 | 작성 위치 | 용도 |
델리게이트를 소지한 클래스 |
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMyMultiDelegate); | 헤더 전역으로 작성 |
델리게이트 정의 |
UPROPERTY(BlueprintAssignavle, VisbleAnywhere, BlueprintCallable) FMyMultiDelegate MyDelegate; |
헤더 클래스 안 public |
델리게이트 변수 선언 | |
MyDelegate.Clear(); | CPP 클래스 소멸 시 (EndPlay 등) |
바인드된 함수 제거 | |
MyDelegate.Broadcst(); | CPP 델리게이트 함수들을 호출할 함수에 작성 |
델리게이트에 등록된 함수들 호출 |
|
델리게이트에 등록할 함수를 지닌 클래스 | MyDelegate.IsBound() | CPP BeginPlay (바인드하기 전에 사용) |
바인드된 함수가 있는지 ( 에러 방지 ) |
VariableOfClassHavingDelegate-> FMyDelegate.AddDynamic( this, &ClassOfFunctionRegisteringToDelegate:: FunctionRegisteringToDelegate ); |
CPP BeginPlay |
델리게이트에 함수 등록 (바인드, 여러개 가능) |
Multi를 제거하면 싱글 다이나믹 캐스트
📌 예시
예시는 아래 블로그에서 자세하게 확인 가능하다.
UE4 C++ Delegate 정리 & 샘플 프로젝트
개인적으로 UE4 C++에서 Delegate를 사용할 때 처음에 굉장히 에러를 많이 겪었습니다, 그래서 이번 포스팅은 UE4 C++에서 Delegate를 사용하는 방법에 대해 정리하고 샘플프로젝트도 만들었습니다. https
darkcatgame.tistory.com
'Unreal' 카테고리의 다른 글
Unreal5 사소하지만 유용한 꿀팁 (0) | 2025.02.09 |
---|---|
Unreal5 갓 레이 표현 (0) | 2025.02.09 |
Unreal5 블루프린트 깜빡이는 조명 만들기(by sin 함수) (0) | 2025.02.08 |
짐벌락 현상 (0) | 2025.02.08 |
Unreal5 애니메이션 없는 드론의 프로펠러 돌리기(언리얼 에디터로 스태틱 메시 분리) (0) | 2025.02.06 |