Creating Delegate
델리게이트는 매크로를 이용해서 생성을 한당
매크로는 내부에서 TBaseDelegate 객체를 델리게이트 이름으로 타입 정의한닷
델리게이트 생성 매크로는 필요 용도에 따라 종류가 다양하다.
싱글 캐스트 델리게이트 | 가장 기본적인 Delegate로 함수 1개를 바인드하여 사용합니다. |
멀티 캐스트 델리게이트 | 싱글 케스트와 동일하지만 여러 함수를 바인드 할 수 있습니다. |
이벤트 델리게이트 | 멀티 케스트와 동일하지만 전역으로 설정할 수 없어 외부 클래스에서 추가 델리게이트 선언이 불가능합니다. |
다이내믹 델리게이트 | 다이나믹은 싱글과, 멀티 두개다 존재하며 다이나믹 델리게이트는 직렬화(Serialize)화 되어 블루프린트에서 사용 가능합니다. |
델리게이트 생성 매크로는 언리얼 공식 문서에 잘 정리되있으니깐 필요한 거 잘 찾아서 쓰면 됨 ㅇㅇ
언리얼 Delegate 공식 문서 : https://docs.unrealengine.com/ko/Programming/UnrealArchitecture/Delegates/index.html
Binding Delegate
델리게이트를 생성한 후 델리게이트와 바인딩을 해야지 델리게이트가 바인딩한 함수를 호출할 수 있다.
A 인스턴스에서 델리게이트를 선언했다면 B 인스턴스에서 자신의 주소와 함수를
A 인스턴스의 델리게이트의 인자로 줘서 바인딩한다.
바인딩할려는 인스턴스의 종류에 따라 바인딩 함수가 다양한데
언리얼 공식 문서에서 필요한 바인딩 함수를 찾아서 쓰면 된당
예) 슬레이트 인스턴스 바인딩 :
RamaMeleeWeaponComp->RamaMeleeWeapon_OnHit.CreateSP(this,
&SSomeSlateClass::RespondToMeleeDamageTaken);
UObject 상속 받은 인스턴스 바인딩 :
WebConnection->TokenCompleteDelegate.BindUObject(this, &UABGameInstance::RequestTokenComplete);
델리게이트는 CreateSP 함수와 BindUObject 함수를 통해 바인딩하면
UObject와 Shared Pointer 기반 인스턴스에 대한 Weak Ptr 가진당
Call Binded Fuction
델리게이트에 바인딩 된 함수를 호출하는 방법은 3가지가 있다.
호출하는 함수는 마찬가지로 언리얼 공식 문서 참조!
ExcuteIfBound로 바인딩 된 인스턴스가 해제됬는지 확인 후에 함수를 호출하는 방식이 안전함.
UObject와 Shared Pointer 기반 인스턴스에 대한 Weak Pointer가 있기 때문에
ExcuteIfBound로 인스턴스가 존재하는지 확인하는 건 안전한데,
Raw Pointer 인스턴스는 댕글링 포인터일 위험이 있음
'공부 > Unreal Engine 4' 카테고리의 다른 글
World Composition Level Streaming Problem when Teleporting (0) | 2020.11.07 |
---|---|
CSV String to Data Table(vice versa) (0) | 2020.09.08 |
UE4 플러그인 모듈 참조 (0) | 2020.08.27 |
가비지 컬렉션 / shared_ptr, weak_ptr (0) | 2020.08.02 |
UE4 UBT(Unreal Build Tool) (0) | 2020.07.28 |