UserWidget의 Native
UserWidget을 상속하여 UMG작업을 하면 Native~~라는 함수를 자주 사용한다.
하지만, UserWidget에는 Native가 없는 함수들도 존재한다.
예를 들면, UserWidget에는 NativeOnMouseButtonDown라는 함수도 존재하고 OnMouseButtonDown라는 함수도 존재한다.
이 두 함수의 차이점을 알고 싶어 자세히 살펴보니 NativeOnMouseButtonDown에서 OnMouseButtonDown를 호출하는 것을 알 수 있었다.
그렇다면 NativeOnMouseButtonDown가 존재하는 이유가 무엇인지 알아보려 글을 쓴다.
Native
위에서 언급한 두 함수의 차이는 Native의 여부이다.
따라서, Native에 대해 알아보았다.
Native는 블루프린트가 실행될 때 VM(가상머신)에 의해 Native C++ 코드로 변환된다는 의미를 갖는 것 같다.
VM에 의해 Native C++로 변환될 때는 비용이 발생한다.
이 부분을 보니 블루 프린트가 C++ 보다 성능이 좋지 않다는 것을 이해할 수 있었다.
예시
UserWiget의 코드를 보면 다음과 같다.
FReply UUserWidget::NativeOnMouseButtonDown( const FGeometry& InGeometry, const FPointerEvent& InMouseEvent )
{
return OnMouseButtonDown( InGeometry, InMouseEvent ).NativeReply;
}
OnMouseButtonDown을 호출하는 것을 볼 수 있다.
하지만, 애초에 OnMouseButtonDown은 virtual 함수가 아니기 때문에 override가 불가능하다.
UFUNCTION(BlueprintImplementableEvent, BlueprintCosmetic, Category="Mouse")
UMG_API FEventReply OnMouseButtonDown(FGeometry MyGeometry, const FPointerEvent& MouseEvent);
정리하자면, Native~~는 블루프린트 함수를 C++코드로 변환하여 사용하는 함수인 것 같다.
즉, 사용자는 Native~~를 재정의하여 사용하면 된다.
마무리
틀린점이 있다면 댓글을 달아주세요