본문 바로가기
Unreal/Manual

Unreal C++ BlueprintNativeEvent, BlueprintImplementableEvent

by Dev_카페인 2023. 11. 4.
반응형

[Unreal/C++] BlueprintNativeEvent, BlueprintImplementableEvent

 

언리얼에서는 협업을 위한 블루프린트 기능을 제공한다.

프로그래머는 기능을 구현해 확인을 받고 수정을 거듭한다.

확인 한 번에 "OK"가 떨어진다면 금상첨화겠지만, 대부분의 기능들은 조금씩 수정되기 마련이다.

거듭되는 수정에 지친 프로그래머는 관계자에게 직접 수정하라고 하지만 관계자는 C++에 대한 지식이 없다.

이 때 필요한 것이 BlueprintNativeEvent와 BlueprintImplementableEvent다.

 

BlueprintNativeEvent는 블루프린트에서 덮어쓸 수 있도록 지정하는 것이다.

UFUNCTION(BlueprintNativeEvent) 매크로를 설정한 후 기존에 구현되어 있던 함수 내용은

함수명 뒤에 "_Implementation"을 덧붙여 구현한다.

대상 함수를 오버라이드한 것을 블루프린트에서 찾지 못하면 _Implementation이 붙은 함수가 실행되는 것이다.

UFUNCTION(BlueprintNativeEvent)
	void BlueprintOverride();		// 블루프린트에서 덮어쓸 친구
	void BlueprintOverride_Implementation();	// 기존 구현 내용

 

C++ 개발자는 구현했던 내용을 _Implementation에 백업해 놓고 이벤트 함수만 빼놓는 격이다.

 

C++에서는 대상함수 원형을 호출하면 된다. 위 코드를 예시로 들자면 BlueprintOverride();를 호출하면 블루프린트에 구현되어 있을 경우 블루프린트 함수를 실행하고 블루프린트에 구현되어 있지 않다면 _Implementation이 붙은 함수를 실행하게 된다.

Ex) 이해를 돕기 위한 BlueprintNativeEvent if
if(BlueprintOverride()가 블루프린트에서 구현됌?)
{
	BlueprintOverride();
}
else
{
	BlueprintOverride_Implementation();
}

즉, 난 이렇게 구현해 놓았는데 너가 필요하면 재정의 해서 사용해 ! 이다.

 

그렇다면 BlueprintImplementableEvent는 무엇일까?

BlueprintImplementableEvent는 BlueprintNativeEvent와 비슷하지만 C++내에 정의된 내용이 없다는 것이다.

UFUNCTION(BlueprintImplementableEvent)
	void BlueprintOverride();

이 매크로 또한 블루프린트에서 재정의 해야하며, 구현이 되어있지 않을 경우 무시된다.

Ex) 이해를 돕기 위한 BlueprintImplementableEvent if
if(BlueprintOverride()가 블루프린트에서 구현됌?)
{
	BlueprintOverride();
}

즉, 만들어는 놨으니 정의하세요 ! 이다.

두 매크로는 모두 블루프린트에서 함수명으로 이벤트를 구현할 수 있다.

부모의 호출이 필요한 경우 노드에 우클릭하여 부모노드를 생성해 연결시켜주면 된다.

 

반응형