어디서든 로드한 모듈의 인스턴스을 얻어서 사용하는 방법
모듈은 IModuleInterface을 상속받고 IMPLEMENT_MODULE(모듈클래스명, 사용자가 정의한 모듈이름)와 같은 매크로로 엔진에 등록된다. 따라서 해당 모듈의 인스턴스을 얻어서 사용하고자 한다면 모듈을 등록할 때 설정해 준 모듈 이름으로 찾아 주어야 한다.
일단 모듈은 Cpp파일에 추가된 IMPLEMENT_MODULE(FPatcherModule, Patcher)매크로를 통해 엔진에 해당 모듈이 등록된다.
그리고 아래와 같은 코드로 인스턴스을 얻을 수 있다.
FPatcherModule& Patcher = FModuleManager::GetModuleChecked<FPatcherModule>("Patcher");
언리얼 C++에서 엔진 버전에 따른 조건부 컴파일 하기
엔진 버전 define은 엔진의 Version.h헤더파일에 정의되어 있다.
아래 코드는 현재 엔진 버전이 4.27.2라는 것을 나타낸다.
#define ENGINE_MAJOR_VERSION 4
#define ENGINE_MINOR_VERSION 27
#define ENGINE_PATCH_VERSION 2
따라서 아래와 같이 현재 엔진이 UE4인지 아니면UE5인지에 따라 조건부 컴파일을 할 수 있다.
원한다면 버전을 좀더 디테일하게 구분할 수 있다.
헤더 파일 추가는 잊지 말자~
추가하지 않으면 오류가 발생한다.
#include "Runtime/Launch/Resources/Version.h"
플러그인 패키징시 발생하는 오류에 대해~
개발중인 플러그인을 노트북의 UE4.27.2 에디터에서 패키징시에 아래와 같은 오류가 발생했다. 현재 VisualStudio 2022을 사용하고 있는데 왜 2017을 찾는지 모르겠다.
ERROR: Visual Studio 2017 must be installed in order to build this target.
구글링을 해본 결과 UE4.27.2버전에서 플러그인을 빌드할 때 RunUAT.bat의 커맨드 라인에 -VS2019라는 인자을 추가해 주지않으면 BuildPluginCommand.Automation.cs에서는 최대한의 호환성을 위해 VS2017 컴파일러을 가지고 빌드을 한다. 따라서 현재 내 PC에 VS2019만 설치 되어있고 VS2017이 설치되어 있지 않는다면 위와 같은 오류가 출력된다.
따라서 만약 인스톨 버전의 엔진에서 플러그인 패키징시에 RunUAT.bat에 VS2019인자을 추가해 주는 방법을 모른다면 차라리 github에서 UE4.27.2의 소스코드을 다운받아서 BuildPluginCommand.Automation.cs에서 bVS2019을 true로 설정하여 빌드하여 해당 엔진을 가지고 플러그인을 빌드해야 한다.
만약 인스톨 버전 엔진에서 빌드하고 싶다면 \Engine\Build\BatchFiles\RunUAT.bat을 CMD에서 실행하여 플러그인을 빌드할 수 있다.
위 커맨드 라인의 BuildPlugin은 BuildCommand클래스을 상속받은 클래스 이름임을 알 수 있다. 즉 플러그인을 빌드하는 기능의 클래스이다. 이걸 RunUAT.bat을 통해 실행시키는 것이다.
참고링크 - https://forums.unrealengine.com/t/cannot-package-plugin/388664
참고링크 - https://forums.unrealengine.com/t/need-vs-2017-to-build-plugins-in-4-25/469289/10
'개발일지' 카테고리의 다른 글
2022/11/22 개발 일지 (0) | 2022.11.22 |
---|---|
2022/11/21 개발 일지 (0) | 2022.11.21 |
2022/11/20 개발 일지 (0) | 2022.11.20 |
2022/11/18 개발 일지 (0) | 2022.11.18 |
2022/11/16 개발 일지 (0) | 2022.11.15 |