Game Programming/UE4

[UE4] Delegate

Doanie 2023. 9. 17. 19:59

[UE4] 델리게이트 (Delegate)


델리게이트

C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형이다. 임의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있다. 가급적이면 델리게이트는 항상 참조 전달을 해야하며, 종류는 이벤트, 다이나믹, 싱글-캐스트, 멀티-캐스트가 있다.

싱글 캐스트 : 가장 기본적인 델리게이트로 함수 1개를 바인드하여 사용.
멀티 캐스트 : 싱글 캐스트와 비슷하지만 여러 함수를 바인드 가능.
다이나믹 : 직렬화되어 블루프린트에서 사용 가능.
이 벤 트 : 멀티 캐스트와 비슷하지만 전역으로 설정할 수 없어 외부에서는 추가 델리게이트 선언이 불가능.

 

델리게이트 선언

//. 싱글 캐스트
DECLARE_DELEGATE(FDele_SingleCast);
DECLARE_DELEGATE_OneParam(FDele_SingleCast_OneParam, int32);

//. 멀티 캐스트
DECLARE_MULTICAST_DELEGATE(FDele_MultiCast);
DECLARE_MULTICAST_DELEGATE_TwoParm(FDele_MultiCast_TwoParam, bool, int32);

//. 다이나믹
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDele_Dynamic);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDele_Dynamic_OneParam, int32, SomeParameter);

UCLASS()
class TestProject ATestActor : public AActor
{
	GENERATED_BODY()
public :
	//. 이벤트
	DECLARE_EVENT(ATestActor, FDele_Event);
	DECLARE_EVENT_OneParam(ATestActor, FDele_Event_OneParam, int32);
}

 

바인드

델리게이트에 특정 바인드 함수를 통하여 콜백함수를 등록하는 것을 의미한다.

바인드 함수들

 

실행하기

Execute() : 델리게이트에 바인딩되어 있는 함수를 호출하여 실행.
ExecuteIfBound() : 반환값이 없는 델리게이트에 대해서는 이 함수를 통해 실행.
IsBound() : 델리게이트를 실행하기 전 바인딩이 되어있는지 확인 절차가 필요하며, IsBound() 함수를 통하여 바인딩이 되어있는지 확인 가능.

델리게이트에 대해서 알아보았는데 상당히 유용한 기능이며 델리게이트의 종류에 맞게 잘 활용한다면 더욱더 원활한 컨텐츠 구현이 될수 있을 것으로 보인다.

 

싱글캐스트에서 사용하는 함수들은 그 외 델리게이트에서 사용할 때 기능은 같지만 함수명이 바뀌는 부분이 있으니 주의하자.

Unbind() → Clear()
Execute() → Broadcast()
BindUFunction() → AddUFunction()

'Game Programming > UE4' 카테고리의 다른 글

[UE4] BindWidget  (0) 2023.10.28
[UE4] Smart Pointer  (0) 2023.10.21
[UE4] TMap  (0) 2023.09.09
[UE4] TArray  (0) 2023.09.02
[UE4] Log  (0) 2022.10.13