Game Develop

[UE5] 가상함수 생성하기. 본문

UnrealEngine5/이것저것

[UE5] 가상함수 생성하기.

MaxLevel 2023. 3. 28. 05:06

언리얼엔진에서 가상함수를 따로 생성해주기 위해선 C++에서 했던 것 처럼 하면 안된다.

아래처럼 순수가상함수를 생성해본다고 가정하자.

 

virtual void TestFunction() = 0;

 

이런식으로 작성하고 빌드하면, '추상클래스를 인스턴스화 할 수 없다'라는 에러가 뜰 것이다.

 

일단 결과적으로, UObject의 하위 시스템은 각 클래스를 인스턴스화 할 수 있어야 한다고 한다.

아마 에디터에서 내부적으로 사용할 CDO를 생성하기 위해 그런 것 같다.

하지만 위와같이 C++에서만 알아먹게 선언해놓는다면 에디터는 자식클래스에서 저걸 제대로 override해서 구현해놨는지 알 수 없다. (이건 약간 뇌피셜)

 

순수가상함수뿐만 아니라 그냥 가상함수 선언 후, 자식클래스에서 오버라이드하더라도 에러가 뜨면서 빌드에 실패한다. 대충보니까 확인할 수 없는 외부기호 뜨는거보니까 비슷한 이유인 것 같다.

 

당연히 불가능하진 않다. 에디터에서 해당 클래스 가상함수의 정의를 확인할 수 없으니까, 그냥 정의를 바로 해주면 된다.

 

virtual void TestFunction() {}  <--- 이렇게 {}를 해주면 된다... 매우 간단...

 

이렇게하고 자식클래스에서 오버라이드해서 재정의해주면 된다.

 

언리얼에서 지원하는 방법으로 순수가상함수를 만들고 싶다면 아래와처럼 해주면 된다.

 

// AMonster.h

virtual void TestPure() PURE_VIRTUAL(AMonster::Interact,);

 

PURE_VIRTUAL 매크로를 통해, 에디터에서 인식할 수 있게 해준다.

실제 사용해본 결과 잘 됐으니, 필요할 때 잘 써먹을 수 있다.