내일배움캠프 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;
댓글
댓글 쓰기