공부/Unreal Engine 4

UE4 Delegate

Lero God 2020. 9. 3. 00:31
Creating Delegate

 

델리게이트는 매크로를 이용해서 생성을 한당

 

Declare Delegate

 

매크로는 내부에서 TBaseDelegate 객체를 델리게이트 이름으로 타입 정의한닷

 

Typedef Delegate

 

델리게이트 생성 매크로는 필요 용도에 따라 종류가 다양하다.

 

싱글 캐스트 델리게이트 가장 기본적인 Delegate로 함수 1개를 바인드하여 사용합니다.
멀티 캐스트 델리게이트 싱글 케스트와 동일하지만 여러 함수를 바인드 할 수 있습니다.
이벤트 델리게이트 멀티 케스트와 동일하지만 전역으로 설정할 수 없어 외부 클래스에서 추가 델리게이트 선언이 불가능합니다.
다이내믹 델리게이트 다이나믹은 싱글과, 멀티 두개다 존재하며 다이나믹 델리게이트는 직렬화(Serialize)화 되어 블루프린트에서 사용 가능합니다.

 

델리게이트 생성 매크로는 언리얼 공식 문서에 잘 정리되있으니깐 필요한 거 잘 찾아서 쓰면 됨 ㅇㅇ

 

언리얼 Delegate 공식 문서 : https://docs.unrealengine.com/ko/Programming/UnrealArchitecture/Delegates/index.html

 

 

Binding Delegate

   

    델리게이트를 생성한 후 델리게이트와 바인딩을 해야지 델리게이트가 바인딩한 함수를 호출할 수 있다.

    A 인스턴스에서 델리게이트를 선언했다면 B 인스턴스에서 자신의 주소와 함수를

    A 인스턴스의 델리게이트의 인자로 줘서 바인딩한다.

    바인딩할려는 인스턴스의 종류에 따라 바인딩 함수가 다양한데
    언리얼 공식 문서에서 필요한 바인딩 함수를 찾아서 쓰면 된당

 

   

Bind Delegate

 

 

    예) 슬레이트 인스턴스 바인딩 :
    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로 바인딩 된 인스턴스가 해제됬는지 확인 후에 함수를 호출하는 방식이 안전함.

 

   

Call Binded Function

 

    UObject와 Shared Pointer 기반 인스턴스에 대한 Weak Pointer가 있기 때문에
    ExcuteIfBound로 인스턴스가 존재하는지 확인하는 건 안전한데,
    Raw Pointer 인스턴스는 댕글링 포인터일 위험이 있음