일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- baekjoon
- GeeksForGeeks
- 언리얼엔진5
- C++
- UnrealEngine4
- 프로그래머스
- softeer
- IFileDialog
- RVO
- C
- Programmers
- const
- Unreal Engine5
- 팰린드롬 만들기
- directx
- 티스토리챌린지
- 백준
- 1563
- DirectX11
- 줄 세우기
- algorithm
- NRVO
- UE5
- Frustum
- 오블완
- 2294
- RootMotion
- winapi
- UnrealEngine5
- DeferredRendering
- Today
- Total
Game Develop
[UE5] 가상함수 생성하기. 본문
언리얼엔진에서 가상함수를 따로 생성해주기 위해선 C++에서 했던 것 처럼 하면 안된다.
아래처럼 순수가상함수를 생성해본다고 가정하자.
virtual void TestFunction() = 0;
이런식으로 작성하고 빌드하면, '추상클래스를 인스턴스화 할 수 없다'라는 에러가 뜰 것이다.
일단 결과적으로, UObject의 하위 시스템은 각 클래스를 인스턴스화 할 수 있어야 한다고 한다.
아마 에디터에서 내부적으로 사용할 CDO를 생성하기 위해 그런 것 같다.
하지만 위와같이 C++에서만 알아먹게 선언해놓는다면 에디터는 자식클래스에서 저걸 제대로 override해서 구현해놨는지 알 수 없다. (이건 약간 뇌피셜)
순수가상함수뿐만 아니라 그냥 가상함수 선언 후, 자식클래스에서 오버라이드하더라도 에러가 뜨면서 빌드에 실패한다. 대충보니까 확인할 수 없는 외부기호 뜨는거보니까 비슷한 이유인 것 같다.
당연히 불가능하진 않다. 에디터에서 해당 클래스 가상함수의 정의를 확인할 수 없으니까, 그냥 정의를 바로 해주면 된다.
virtual void TestFunction() {} <--- 이렇게 {}를 해주면 된다... 매우 간단...
이렇게하고 자식클래스에서 오버라이드해서 재정의해주면 된다.
언리얼에서 지원하는 방법으로 순수가상함수를 만들고 싶다면 아래와처럼 해주면 된다.
// AMonster.h
virtual void TestPure() PURE_VIRTUAL(AMonster::Interact,);
PURE_VIRTUAL 매크로를 통해, 에디터에서 인식할 수 있게 해준다.
실제 사용해본 결과 잘 됐으니, 필요할 때 잘 써먹을 수 있다.
'UnrealEngine5 > 이것저것' 카테고리의 다른 글
[UE5] 유효성 검사. (0) | 2023.08.04 |
---|---|
[UE5] 특정 인터페이스가 구현됐는지 검사할 때 주의할 점 (0) | 2023.06.27 |
[UE5] AIPerception 각 옵션변경 실시간 적용하기 (0) | 2023.03.03 |
[UE5] C++로 AI Perception 사용할 때 주의할점. (0) | 2023.02.28 |
[UE5] CSV파일 로드 후 조작하기 (string to enum class) (0) | 2023.02.21 |