본문 바로가기
게임 공부/Unreal Engine

BlueprintNativeEvent - UFUNCTION 매크로 지정자

by woohyeon 2022. 1. 23.
반응형

UFUNCTION 매크로에 BlueprintNativeEvent 라는 지정자를 넣어줄 수 있다.

이 지정자의 의도는 기본적으로 우리가 C++에서 함수 구현을 할 것이지만, 필요하다면 블루프린트에서 함수 재정의를 할 수 있도록 허락한다는 것이다. 만약 블루프린트에서 재정의를 했다면 재정의된 함수를 호출하고, 재정의가 되어 있지 않다면 기존 C++ 구현 함수를 호출하도록 언리얼 헤더 툴이 무언가 작업을 해준다. 

좀 더 자세히 살펴보면,

우선 이 지정자를 사용하고 싶다면, 우리는 총 2개의 함수를 선언해야 한다. 예를 들어 다음과 같이 Func이라는 이름의 함수를 선언하고 싶다면, 추가로 Func_Implementation 이라는 이름의 가상 함수도 선언해야 한다.

UFUNCTION(BlueprintNativeEvent)
void Func();
virtual void Func_Implementation(); // [FunctionName]_Implementation


위와 같이 선언 후 우리는 Func_Implementation()만 구현한다. 그리고 Func()은 구현부를 작성하지 않고 그대로 둔다.

그러면 언리얼 헤더 툴이 전처리 작업에서 Func()의 구현부를 다음과 같이 작성해준다.

void Func()
{
    if(블루프린트에서 오버라이딩 되었다면)
        // 오버라이딩된 블루프린트 함수 호출
    else
        Func_Implementation();
}

 

위 내용을 이해하면 알겠지만, 우리가 직접 구현하는 함수는 Func_Implementation() 이지만 해당 함수를 사용하고 싶다면 Func() 함수를 호출해야 한다. 그래야 케이스에 따라 블루프린트에서 재정의된 함수를 호출할지 C++ 구현 함수를 호출할지를 결정할 수 있기 때문이다. 




댓글