내일배움캠프 53일차 - 언리얼 C++ 심화: 인터페이스와 델리게이트, 바인드

언리얼 인터페이스

상속만을 위한 객체. 상속만을 위해 만들어진 것이기 때문에 해당 객체에 코드를 직접 구현하는것은 바람직한 방법이 아니다. 코드의 구현은 자손에게 맡겨야한다.

인터페이스는 인터페이스 클래스의 형태로도 UObject의 형태로도 구현된다.
UClass*에 사용해야할 일이 있으면 UObject로 참조할 것.

다중상속

클래스에 콤마(,) 후 추가적으로 상속을 받아 두 개의 멤버 변수/함수를 동시에 쓸 수 있다.


델리게이트(Delegate)

함수를 저장(Bind)하고 실행(Execute)할 수 있는 변수이다.


델리게이트의 종류

// C++ 형대로 1대1만 지원한다

DECLARE_DELEGATE


// C++ 1대 다수

DECLARE_MULTICAST


// 1대1 형태로 블루프린트까지 지원한다

DECLARE_DYNAMIC


// 1대 다수로 블루프린트까지 지원

DECLARE_DYNAMIC_MULTICAST


// 바인드 되기 전까지 1바이트도 차지 않는다!!! 사용자 -> 느려집니다. 거의 바인딩 되지 않으면 효율적!!!!!!!

DECLARE_SPARSE


파라미터가 하나다.
DECLARE_DELEGATE_OneParam

반환값이 있고, 파라미터가 세개다.
DECLARE_DELEGATE_RetVal_ThreeParams

※ MULTICAST는 반환값(RetVal)을 지원하지 않는다.

블루프린트까지 지원하고 1대1이며 리턴값이 있고, 두 개의 파라미터를 가진다.
DECLARE_DYNAMIC_DELEGATE_RetVal_TwoParams


바인딩 - 호출되면 실행되는 함수

C++ 전용 바인딩은 AddUObject : 실행속도가 빠름
블루프린트까지 포함한 바인딩은 AddDynamic : 느리지만 블루프린트 이벤트디스패처와 연동가능

싱글 1대1 사용 -> Bind
멀티 1대 다수 -> Add

앞부분 Bind/Add
뒷부분 UObject/Dynamic

오브젝트, SharedPtr, Lambda, Static, UFUNCTION
(★중요)오브젝트 - 델리게이트.BindUObject(객체, &UMyObject::함수);
스마트포인터 - 델리게이트.BindSP(객체, &UMyObject::함수);
람다 - 델리게이트.BindLambda([](){});
스태틱 - 델리게이트.BindStatic(객체 ,&UMyObject::함수);
UFUNCTION - 델리게이트.BindUFunction(객체, TEXT("함수이름");

싱글 C++ -> BindUObject
멀티 C++ -> AddUObject
싱글+블루프린트 -> BindDynamic
멀티+블루프린트 -> AddDynamic

※ 블루프린트와 연동하는 Dynamic은 UFUNCTION() 리플렉션 연동 필수


델리게이트 신호 송신 방법

싱글 1대1 대응 = Execute();
멀티 1대 다수 = Broadcast();

※ 싱글은 바인딩이 꼭 반드시 되어야 한다. (없으면 크래시 발생)
※ 싱글캐스트는 반드시 Execute전에 isBound()를 습관처럼 사용한다.
if(MySingleDelegate.IsBound())
{
    MySingleDelegate.Execute();
}

블루프린트로 받아올경우
이쪽에서 객체로 만들고, 그 객체를 통해서 블루프린트 델리게이트를 만들어줌

UPROPERTY(BlueprintAssignable)
FCustomDelegate OnAction;

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁