Unreal

Unreal5 델리게이트

yoosorang 2025. 2. 8. 11:34

📌 개요

델리게이트는 이벤트 기반 프로그래밍을 구현할 수 있도록 해주는 기능으로,

특정 이벤트가 발생했을 때 특정 함수를 실행하도록 바인딩하는 역할을 한다.

 

델리게이트는 단일, 멀티, 다이나믹으로 구분할 수 있다.

 

📌 단일 델리게이트

✔ 특징

  • 한 번에 한 개의 함수만 바인딩 가능.
  • 빠른 성능을 제공하며, 블루프린트에서는 사용할 수 없음.
클래스 작성 작성 위치 용도
델리게이트를
소지한 클래스
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