아래 내용은 UnrealEngine5.3 환경에서 작성되었습니다.
언리얼 코드 내에는 수많은 매크로들이 빌드 환경에 따라 정의되어 있고 패키징 시 빌드 설정을 변경하는 것만으로 많은 매크로들의 설정을 변경할 수 있습니다.
하지만 빌드 설정에 종속적인만큼 이 기준에서 벗어나는 경우 매크로 값을 Shipping 으로 패키징한 환경에서도 콘솔 명령어나 치트 매니저의 기능을 사용하고 싶은 경우도 존재할 수 있습니다.
이러한 경우 UnrealBuildTool 에서 참조하는 Build.cs 나 Target.cs 의 ModuleRules/TargetRules 를 변경하는 것으로 해결 가능합니다.
언리얼은 IDE 에서의 빌드든 패키징 동작 초기의 빌드든, dotnet 을 통해 UnrealBuildTool 을 실행하는 것으로 동작합니다.
UnrealBuildTool 은 프로젝트를 빌드하는데 있어서 필요한 각 모듈의 중간 파일 생성부터 실제 컴파일까지를 담당하게 되는데, 모듈별로 include 하는 파일들이 이 과정에서 생성되며, 그 중 매크로에 대한 내용은 Definitions.h 로 생성됩니다.
따라서 위에서 언급한 것과 같이 모듈의 Build.cs 나 프로젝트의 Target.cs 에 필요한 설정을 추가하는 것으로 실제 빌드에 포함되는 매크로들의 정의까지 관여할 수 있습니다.
1. 특정 모듈 내에서만 매크로를 재정의 하고 싶은 경우
Shipping 빌드 중 엔진의 기본 동작에서는 UE_ENABLE_DEBUG_DRAWING 를 사용하지 않고 특정 모듈에서만 사용하고자 하는 경우를 예로 들 수 있습니다.
이런 경우에는 모듈의 Build.cs 에서 PublicDefinitions 나 PrivateDefinitions 에 매크로를 설정하면 됩니다.
2. 프로젝트에 속한 모듈들에 매크로를 재정의 하고 싶은 경우
1번과 유사하지만, 재정의한 매크로 값을 프로젝트에 속하는 모든 모듈에 적용하고 싶은 경우, ModuleRules 대신 TargetRules 을 활용할 수 있습니다.
3. 전체 코드에 대해서 매크로를 재정의 하고 싶은 경우
이 글의 서두에서와 같이 Shipping 빌드에서도 콘솔창을 활용하고 싶은 경우가 이에 해당됩니다.
콘솔 창은 아래와 같이 UGameViewportClient 에서 ALLOW_CONSOLE 이 활성화 되는 경우에만 생성하게 됩니다.
ALLOW_CONSOLE 은 Shipping 의 경우 ALLOW_CONSOLE_IN_SHIPPING 매크로 값을 따르며, 이는 정의되지 않은 경우 0 입니다.
따라서 Shipping 에서 UConsole 이 생성되도록 하려면 TargetRules.GlobalDefinitions 에 해당 매크로 정의를 추가하면 됩니다.
참고로 이렇게 ModuleRules 나 TargetRules 의 Definitions 들이 적용된 파일은 빌드 시
Intermediate/Build/Win64/x64/(프로젝트이름)/(빌드환경)/(모듈이름)/Definitions.(모듈이름).h 에 위치합니다.
이 예시는 Game 빌드인 경우이며, Editor 빌드인 경우 차이가 있습니다.
위에서 예시로 들었던 ALLOW_CONSOLE_IN_SHIPPING 의 경우 Core 모듈의 코드에 있기 때문에 Core/Definitions.h 에 있는 것을 확인할 수 있습니다.
이렇게 중간 파일의 위치를 알고 있으면 해당 파일을 확인하는 것으로 매크로 설정이 어떻게 되어 있는지 파악하기 용이합니다.
여기까지 언리얼 엔진 사용 시 매크로 재정의 방법이었습니다.
'Unreal Engine' 카테고리의 다른 글
Where are UE_BUILD macros defined in UnrealEngine (2) | 2023.10.26 |
---|---|
How to use the WaitForDebugger switch when debugging the Unreal Engine (0) | 2023.08.11 |
Unreal Package Project 에서 UAT 로 전달되는 Commandline (0) | 2023.08.02 |
How to avoid waiting for 'git status' command during Unreal Engine build (0) | 2023.06.21 |
How to check Unreal global variables in Visual Studio's Watch window (0) | 2023.06.21 |