[UE5] 가상함수 생성하기.
언리얼엔진에서 가상함수를 따로 생성해주기 위해선 C++에서 했던 것 처럼 하면 안된다.
아래처럼 순수가상함수를 생성해본다고 가정하자.
virtual void TestFunction() = 0;
이런식으로 작성하고 빌드하면, '추상클래스를 인스턴스화 할 수 없다'라는 에러가 뜰 것이다.
일단 결과적으로, UObject의 하위 시스템은 각 클래스를 인스턴스화 할 수 있어야 한다고 한다.
아마 에디터에서 내부적으로 사용할 CDO를 생성하기 위해 그런 것 같다.
하지만 위와같이 C++에서만 알아먹게 선언해놓는다면 에디터는 자식클래스에서 저걸 제대로 override해서 구현해놨는지 알 수 없다. (이건 약간 뇌피셜)
순수가상함수뿐만 아니라 그냥 가상함수 선언 후, 자식클래스에서 오버라이드하더라도 에러가 뜨면서 빌드에 실패한다. 대충보니까 확인할 수 없는 외부기호 뜨는거보니까 비슷한 이유인 것 같다.
당연히 불가능하진 않다. 에디터에서 해당 클래스 가상함수의 정의를 확인할 수 없으니까, 그냥 정의를 바로 해주면 된다.
virtual void TestFunction() {} <--- 이렇게 {}를 해주면 된다... 매우 간단...
이렇게하고 자식클래스에서 오버라이드해서 재정의해주면 된다.
언리얼에서 지원하는 방법으로 순수가상함수를 만들고 싶다면 아래와처럼 해주면 된다.
// AMonster.h
virtual void TestPure() PURE_VIRTUAL(AMonster::Interact,);
PURE_VIRTUAL 매크로를 통해, 에디터에서 인식할 수 있게 해준다.
실제 사용해본 결과 잘 됐으니, 필요할 때 잘 써먹을 수 있다.