[언리얼 엔진] 다이내믹 / 멀티캐스트 델리게이트

    다이내믹 델리게이트

    Serialize 가능하면서 리플렉션도 지원하는 델리게이트

    다이내믹 델리게이트 선언하기

    선언은, 전용 매크로를 사용한다.

    • DECLARE_DYNAMIC_DELEGATE_RetVal, etc. - 다이내믹 델리게이트 생성
    • DECLARE_DYNAMIC_MULTICAST_DELEGATE_RetVal, etc. - 멀티-캐스트 델리게이트 생성

    다이내믹 델리게이트 바인딩

    • BindDynamic(UserObject, FuncName) - 다이내믹 델리게이트에서 BindDynamic() 호출을 위한 헬퍼 매크로
    • AddDynamic(UserObject, FuncName) - 다이내믹 멀티캐스트 델리게이트에서 AddDynamic() 호출을 위한 헬퍼 매크로
    • RemoveDynamic(UserObject, FuncName) - 다이내믹 멀티캐스트 델리게이트에서 RemoveDynamic() 호출을 위한 헬퍼 매크로

    다이내믹 델리게이트 실행

    • Execute() - 델리게이트 실행
    • ExecuteIfBound() - 반환값이 없는 델리게이트 실행
    • IsBound() - 델리게이트 실행 여부 검사

    멀티캐스트 델리게이트

    여러 함수에 바인딩시켜 동시에 실행시킬 수 있는 델리게이트

    멀티캐스트 델리게이트는 싱글캐스트 델리게이트의 기능을 그대로 갖고 있다. 오브젝트로의 약 레퍼런스만 가지고 있으며, 구조체와 함께 사용 가능하고, 쉽게 복사할 수 있다.

    멀티캐스트 델리게이트 선언

    표준 델리게이트 선언과 같은 방법으로 선언되나 멀티캐스트 전용 매크로를 사용한다.

    • DECLARE_MULTICAST_DELEGATE_RetVal, etc. - 멀티캐스트 델리게이트 생성
    • DECLARE_DYNAMIC_MULTICAST_DELEGATERetval, etc. - 다이내믹 멀티캐스트 델리게이트 생성

    멀티캐스트 델리게이트 바인딩

    멀티캐스트 델리게이트는 여러개의 함수를 바인딩 시켜 델리게이트가 발동되면 모두 호출되도록 할 수 있다.

    • Add() - 멀티캐스트 델리게이트의 실행 목록에 함수 델리게이트를 추가
    • AddStatic() - raw c++ 포인터 글로벌 함수 델리게이트를 추가
    • AddRaw() - raw c++ 포인터 델리게이트를 추가. raw 포인터는 어떠한 레퍼런스도 사용하지 않기에 오브젝트가 자신의 델리게이트 하에서 삭제된 경우 호출시 안전하지 않다.
    • AddSP() - 공유 포인터 기반 멤버함수 델리게이트를 추가. 자신의 오브젝트에 대한 약 레퍼런스를 유지
    • AddUObject() - UObject 기반 멤버 함수 델리게이트를 추가. 자신의 오브젝트에 대한 약 레퍼런스를 유지
    • Remove() - 멀티캐스트 델리게이트의 실행목록에서 함수를 제거.
    • RemoveAll() - 지정된 UserObject에 바인딩된 이 멀티캐스트 델리게이트의 실행 목록에서 모든 함수를 제거.
    • RemoveAll()은 모든 등록 델리게이트를 제거. 오브젝트 포인터에 바인딩 되지 않은 raw 델리게이트는 이 함수로 제거되지 않음

    멀티캐스트 실행

    멀티캐스트 델리게이트에 여러 델리게이트를 붙인 다음 Broadcast()함수를 호출하여 모두를 동시에 실행 시킨다. 시그너처에는 반환값을 사용할 수 없다. Broadcast() 호출은 바인딩 되어있지 않아도 항상 안전하다. 다만 델리게이트를 통해 출력 변수를 초기화 시키지 않도록 유의하자. 그리고 바인딩된 함수의 실행 순서는 정의되지 않는다.

    반응형

    댓글

    Designed by JB FACTORY