[Unreal] UFUNCTION의 매크로들 (BlueprintCallable, BlueprintImplementableEvent, BlueprintNativeEvent)
UFUNCTION 매크로 중 유사한 기능을 하는 3가지 매크로가 존재한다.
BlueprintCallable
CPP 코드로 만든 함수를 블루프린트 또는 레벨블루프린트에서 호출할 수 있도록 하는 매크로이다.
이 매크로를 사용하여 만든 함수는 블루프린트에서 호출은 가능하나 추가적인 조작(오버라이딩)이 불가능하다.
또한 CPP코드에서 반드시 정의를 구현해야 한다.
함수의 내용이 변경되어서는 안되지만 블루프린트에서도 사용해야할 때 추가한다.
BlueprintImplementableEvent
이 매크로를 사용한 함수는 CPP에서 정의할 수 없으며 블루프린트에서 함수 내부를 정의해야한다.
순수 가상 함수와 같다고 볼 수 있다. (또는 interface)
CPP에서 함수의 정의부를 구현하면 에러가 발생하며 빌드가 되지 않는다.
이벤트 형식으로 구현되며 특정 상황을 블루프린트에서 컨트롤 하고 싶을 때 사용한다.
BlueprintNativeEvent
위 두가지 기능을 합친 것과 비슷한 기능을 동작한다. 즉, 가상 함수와 유사하다.
CPP에서 함수의 내용을 정의할 수 있지만 블루프린트에서 해당 함수를 BlueprintImplementableEvent처럼 재정의할 수 있다. (오버라이딩)
재정의시에는 CPP에서 구현해놓은 정의가 부모가 된다. (상속)
가장 큰 차이점은 가상 함수를 추가하며 함수 선언과 정의 시에 _Implementation을 끝에 붙여야한다.
이 함수는 BlueprintImplementableEvent와 마찬가지로 함수를 CPP에서 정의하는 경우 에러가 발생한다.
CPP에서 해당 함수를 사용하기 위한 용도로 _Implementation를 붙인 가상함수를 추가한다. ( 해당 함수는 반드시 정의되어 있어야 한다)
기본함수(위 사진의 CountdownHasNativeEvent())를 CPP에서 호출하면 블루프린트에서 정의한 함수가 동작되며 추가로 만든 가상함수(위 사진의 CountdownHasNativeEvent_Implementation())를 호출하면 정의된 함수가 호출된다.
그런데 이 함수는 가상함수이다. 즉, 부모의 함수를 동작할 수 있다는 뜻이다. (CountdownHasNativeEvent_Implementation를 블루프린트에서 호출하는 방법)
해당 이벤트를 우클릭하면 부모함수를 호출하는 기능이 존재한다.
위처럼 사용하면 상속의 Super:: 처럼 부모함수를 호출한 것과 동일하다.
언리얼 도큐먼트에서 위 매크로에 대한 설명이다.
'[Unreal4] > 기능' 카테고리의 다른 글
[Unreal] unreal 스트링 처리 (0) | 2022.01.22 |
---|---|
[Unreal] cheat manager 사용하여 디버그에 도움 주기 (0) | 2022.01.22 |
[Unreal] Auto Reimport 기능을 통해 프로젝트 경로의 폴더 모니터링 하기 (0) | 2022.01.22 |
[Unreal] 컴파일 에러에 한글 깨지지 않도록 변경하기 (0) | 2022.01.17 |
[Unreal] C++로 LevelBlueprint 만들기 (0) | 2022.01.15 |