블루프린트와 호환되는 함수형으로 선언시에 사용 블루프린트 오브젝트는 멤버함수에 대한 정보를 저장하고 로딩하는 직렬화(Serialization) 매커니즘이 들어가 있기 때문에, 일반 C++언어가 관리하는 방법으로 멤버함수를 관리할 수 없다. 그래서 블루프린트와 관련된 C++함수는 모두 UFUNCTION 매크로를 사용해야 한다.
블루프린트에서 해당 함수를 호출할 수 있도록 하는 매크로
가상 함수 UFUNCTION 함수 A 를 가진 클래스 A 를 상속하는 ClassB 에서 함수 A 를 override 할때 UFUNCTION 을 다시 쓸 필요 없습니다.
이벤트는 멀티케스트 델리게이트와 매우유사합니다.
구현 클래스에서 오버라이딩 할 수 있는 함수를 선언할 때 사용되는 지정자
블루프린트에서 오버라이드 하여 구현 할 수 있습니다.
C++ 에서는 선언만 해주어야 합니다. 정의가 불가능합니다.
인터페이스에서는 이 지정자를 사용할 수 없습니다.
(함수를 순수가상함수로 만들지는 않습니다. (순수가상함수가 아니기때문에 인터페이스에는 넣을 수 없습니다.))
콜백함수
인수에 이것저것 파라미터를 선언하여, 구현해놓으면,
필요한 곳에서 호출하는 함수
정해진 동작이나 표준이 없는 상황에서,
구현클래스(블루프린트)에서 입맛대로 반응을 할 수있도록 해주는 지정자
기본적으로 c++ 에서 구현을 할것이지만, 필요하다면
블루프린트 에서 재정의를 허락하는 지정자
만약 블루프린트에서 재정의를 햇다면, 재정의된 함수를 호출하고,
재정의가 되어 있지 않다면, 기존 C++ 구현 함수를 호출하도록 언리얼 헤더툴이 어떤 작업을 해준다.
BlueprintNativeEvent 지정자를 사용하려면 2개의 함수를 선언해야 한다.
예를 들어 FUNC 라는 이름의 함수를 선언하고 싶다면, 추가로 FUNC_Implementation 이라는 이름의 가상함수도
선언해야 한다.
UFUNCTION(BlueprintNativeEvent)
void Func();
virtual void Func_Implementation();
void Func()
{
if(블루프린트에서 오버라이딩 되었다면)
// 오버라이딩된 블루프린트 함수 호출
else
Func_Implementation();
}
결국 우리가 직접 구현해야 하는 함수는 Func_Implementation 이지만 해당 함수를 호출한다면 Func 함수를 호출해야 한다. 그래야 케이스에 따라 결정할 수 있기 때문디아. 블루프린트에서 재정의 된 함수를 호출할 지 c++ 구현 함수를 호출할지
경우에 따라서는 Super 메소드를 사용하여, c++ 에서의 구현함수를 호출하고, 블루프린트에의 구현함수 또한 호출할 수 있다.
BlueprintImplementableEvent 지정자는 함수를 순수 가상함수로 만들어 준다.
인터페이스의 함수에서 BlueprintImplementableEvent 를 사용할 수 있다.
BlueprintNativeEvent 로 선언한 함수를 c++ 에서 호출할 경우 Execute_함수명(대상객체, arg1, arg2, ...) 로 호출해주어야 한다.