🎮Unreal4/C++

[UE4] UFUNCTION 함수(BlueprintNativeEvent, BlueprintCallable, BlueprintImplementableEvent)

공대 컴린이 2023. 3. 5. 23:02
728x90

💡 UFUNCTION - BlueprintNativeEvent

직렬화 함수 UFUNCTION에 있는 BlueprintNativeEvent를 사용하면 블루프린트에서도 함수를 호출하여 사용할 수있다.

또한  BlueprintNativeEvent는 프로그래머들이 기본으로 작성해놓은 함수를 필요하다면 재정의하여 사용해서 쓰는 함수이다. 따라서 기본 내용을 정의하는 함수가 따로 필요하다.

(Native라는 키워드가 붙어있으면 C++ 클래스에서 구현하는 함수로 생각하면 된다)

 

따라서 이를 활용한 예제에서 함수명 뒤에 Implementation() 키워드를 붙여 함수를 정의해주었다. 여기에는 꼭 내용을 정의해야하기 때문에 virtual 키워드가 들어갈 수 없다

💡 BlueprintCallable

해당 Native Event 함수를 사용하기 위한 예제로 Player의 Material 색을 변경하는 기능을 구현해보았다.

CPlayer 헤더파일에서 Change Color 함수를 작성하였고, 이를 블루프린트에서도 사용할 수있도록 BlueprintCallable 속성을 더하였다.

 

플레이어의 ChangeColor 함수에서는 Material의 색상을 매개변수로 받아온 색상으로 변경하는 내용이 담겨져있다.

 

이후 BlueprintNativeEvent 함수를 호출한 클래스에서 Implementation 함수를 구현하며 방금 만든 플레이어의 ChangeColor 함수를 호출하며 매개변수를 전달해주었다.

 

결과적으로 ChangeColorWhite 함수는 정의하지 않고, ChangeColorWhite_Implementation 함수만 정의하여 구현하였다.

💡 UFUNCTION - BlueprintImplementableEvent

BlueprintNativeEvent 속성과 비슷하지만 조금 다른 BlueprintImplementableEvent 속성도 사용해보았다.

 

BlueprintNativeEvent 속성은 "내용정의를 이미 다 끝내뒀으니, 필요하다면 재정의하여 사용해"하는 기능을 가지고, BlueprintImplementableEvent 속성은 "어떻게 사용할지 모르니, 호출만 해 놓을게 알아서 사용해"하라는 기능을 가진다.

 

따라서 ChangeColorRed 함수는 BeginOverlap과 EndOverlap 이 시작될때 간단히 호출만 해두고 따로 정의하지 않았다.

 

현재 이 상태에서는 플레이어가 테스트 Box 콜라이더에 들어갔다 나오는 순간 흰색으로 Material 색상이 변한다.

 

작성이 끝난 Override C++ 클래스를 기반 블루프린트를 생성하여 블루프린트 내에서 Change Color Red 함수를 새롭게 정의하고, Change Color White 함수는 재정의하면 C++ 클래스에서 두 함수가 호출될 때 구현된 내용이 적용될 것이다.

 

실행 결과, 들어갔을 때 Change Color Red가 호출되어 플레이어가 빨간색으로, 나왔을 때 Change Color White의 재정의 결과가 호출되어 파란색으로 변경되었다.

728x90