본문 바로가기

Unreal Engine

How to Redefine Macros on Unreal Engine

아래 내용은 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 에 있는 것을 확인할 수 있습니다.

 


이렇게 중간 파일의 위치를 알고 있으면 해당 파일을 확인하는 것으로 매크로 설정이 어떻게 되어 있는지 파악하기 용이합니다.


여기까지 언리얼 엔진 사용 시 매크로 재정의 방법이었습니다.