모듈 은 언리얼 엔진(UE) 의 기본 구성 요소입니다. 엔진은 대규모 모듈 컬렉션으로 구현되며, 게임은 자체 모듈을 제공하여 이를 확장합니다. 각 모듈은 함수 기능 세트를 캡슐화하고 다른 모듈에서 사용할 퍼블릭 인터페이스 및 컴파일 환경(매크로, 인클루드 경로 등)을 제공할 수 있습니다.
모듈은 확장자가 .build.cs
인 C# 소스 파일을 통해 선언되며, 프로젝트의 Source
디렉터리에 저장됩니다. 모듈에 속한 C++ 소스 코드는 .build.cs
파일과 함께 저장되거나 서브디렉터리에 저장됩니다. 각 .build.cs
파일은 ModuleRules
베이스 클래스에서 파생된 클래스를 선언하고 생성자에서 어떻게 빌드되어야 하는지를 제어하는 프로퍼티를 설정합니다. 이러한 .build.cs
파일은 언리얼 빌드 툴(UBT) 로 컴파일되고 전체 컴파일 환경을 결정하도록 구성됩니다.
.build.cs
파일의 일반적인 구조는 다음과 같습니다.
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule : ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) : base(Target)
{
// 여기에 세팅을 지정합니다.
}
}
읽기 전용 프로퍼티
$ IsPlugin (Boolean): 플러그인이 이 모듈을 포함하면 True가 됩니다
$ HasPackageOverride (Boolean): 이 모듈에 지정된 오버라이드 타입이 있을 경우 True를 반환합니다
$ AutoSdkDirectory (String): 활성 호스트 플랫폼을 위한 AutoSDK 디렉터리입니다
$ EngineDirectory (String): 현재 엔진 디렉터리입니다
$ PluginDirectory (String): 이 플러그인을 포함하는 디렉터리의 프로퍼티입니다. 서드 파티 종속성에 경로를 추가할 때 유용합니다.
$ ModuleDirectory (String): 이 모듈을 포함하는 디렉터리의 프로퍼티입니다. 서드 파티 종속성에 경로를 추가할 때 유용합니다.
$ IsVcPackageSupported (Boolean): 빌드 환경설정에 VcPkg가 지원되는지 여부를 반환합니다.
읽기/쓰기 프로퍼티
$ Type (ModuleType): 모듈 타입입니다.
$ BinariesSubFolder (String): DLL을 빌드할 때 이 모듈을 배치할 Binaries/PLATFORM 폴더의 서브폴더입니다 TargetPlatform이나 ShaderFormat 모듈 같이 검색을 통해서 찾아지는 모듈에서만 사용해야 합니다. 트래킹에 FindModules를 사용하지 않으면 모듈을 찾을 수 없습니다.
$ PrivatePCHHeaderFile (String): 이 모듈에 대한 명시적 프라이빗 PCH입니다. 이 모듈이 공유 PCH를 사용하지 않음을 의미합니다.
$ SharedPCHHeaderFile (String): 이 모듈에서 제공하는 공유 PCH의 헤더 파일 이름입니다. 퍼블릭 C++ 헤더 파일에 대한 유효한 상대 경로여야 합니다. 여러 C++ 모듈에 포함된 헤더 파일에 대해서만 설정해야 합니다.
$ ShortName (String): 이 모듈의 중간 디렉터리와 파일에 대체 이름을 지정합니다. 경로 길이 제한에 도달했을 때 유용합니다.
$ bTreatAsEngineModule (Boolean): 이 모듈을 엔진 모듈(예: 엔진 정의 사용, PCH, DebugGame 환경설정에서 최적화가 활성화된 컴파일 등)로 취급해야 하는지 여부입니다. 생성된 규칙 어셈블리에 기반한 디폴트로 초기화됩니다.
$ bUseRTTI (Boolean): 런타임 타입 정보를 사용합니다.
$ bUseAVX (Boolean): 지원하는 플랫폼에서 SSE 또는 AVX 인트린직(intrinsic)을 사용하는 경우 컴파일러가 AVX 인스트럭션을 생성하도록 지시합니다. 이 프로퍼티를 활성화하면 PC 플랫폼의 최소 사양이 변경되며 그에 따른 실행 파일은 AVX 지원 없는 머신에서 충돌합니다.
$ bEnableBufferSecurityChecks (Boolean): 버퍼 보안 확인을 활성화합니다. 이 프로퍼티는 심각한 보안 위험을 방지하기 때문에 일반적으로 활성화해야 합니다.
$ bEnableExceptions (Boolean): 예외 처리를 활성화합니다.
$ bEnableObjCExceptions(Boolean): 오브젝티브 C 예외 처리를 활성화합니다.
$ bEnableUndefinedIdentifierWarnings(Boolean): #if 표현식에서 정의되지 않은 식별자를 사용하면 경고를 표시합니다.
$ MinSourceFilesForUnityBuildOverride(Int32): Unity 빌드가 이 모듈에 대해 활성화되기 위해 필요한 소스 파일의 수. -1 외의 값으로 설정하면 MinGameModuleSourceFilesForUnityBuild에서 제어하는 디폴트 세팅을 오버라이드합니다.
$ MinFilesUsingPrecompiledHeaderOverride (Int32): 0이 아니면 BuildConfiguration.MinFilesUsingPrecompiledHeader를 오버라이드합니다.
$ bBuildLocallyWithSNDBS (Boolean): 모듈이 #import를 사용하여 SN-DBS로 컴파일할 때 로컬에서 빌드해야 합니다.
$ IsRedistributableOverride (Nullable
$ bLegalToDistributeObjectCode (Boolean): 모듈에 대해 CarefullyRedist, NotForLicensees, NoRedist가 아닌 코드/종속성이 있는 경우에도 이 모듈의 출력을 공개적으로 배포할 수 있는지 여부입니다. 바이너리는 릴리즈하지만 소스는 릴리즈하지 않으려는 경우 이 프로퍼티를 사용해야 합니다.
$ AllowedRestrictedFolders (List
$ AliasRestrictedFolders (Dictionary
$ bEnforceIWYU (Boolean): PCHUsage가 ExplicitOrSharedPCH로 설정되었을 때 'include what you use(IWYU)' 규칙을 적용합니다. 모놀리식 헤더(Engine.h, UnrealEd.h 등)가 사용될 경우 경고하고 소스 파일에 일치하는 헤더가 포함되어 있는지 먼저 확인합니다.
$ bAddDefaultIncludePaths (Boolean): 모듈에 연결된 모든 디폴트 인클루드 경로를 추가할지 여부입니다(예: Source/Classes 폴더, Source/Classes 아래의 서브 폴더).
$ bIgnoreUnresolvedSymbols (Boolean): 모듈에서 허상 (미해결 외부) 심볼을 무시할지 여부입니다.
$ bPrecompile (Boolean): 이 모듈을 사전 컴파일해야 하는지 여부입니다. 타깃에서 bPrecompile 플래그가 디폴트로 지정됩니다. 모듈이 사전 컴파일되지 않게 하려면 이 플래그를 지우세요.
$ bUsePrecompiled (Boolean): 이 모듈에서 사전 컴파일된 데이터를 사용해야 하는지 여부입니다. 설치된 어셈블리에서 생성된 모듈의 경우 항상 true입니다.
$ bAllowConfidentialPlatformDefines (Boolean): 이 모듈이 PLATFORM_XXXX 스타일 정의를 사용할 수 있는지 여부입니다. XXXX는 비밀 플랫폼 이름입니다. 이 프로퍼티는 엔진이나 다른 공유 코드에서 #if PLATFORM_XXXX 블록 내부의 비밀 정보를 노출하지 않도록 하는 데 사용됩니다. 그러나 라이선시 게임 코드에서는 이를 허용하는 것이 좋습니다.
$ PublicIncludePathModuleNames (List
$ PublicDependencyModuleNames (List
$ PrivateIncludePathModuleNames (List
$ PrivateDependencyModuleNames (List
$ CircularlyReferencedDependentModules (List
$ PublicSystemIncludePaths (List
$ PublicIncludePaths (List
$ InternalncludePaths (List
$ PrivateIncludePaths (List
$ PublicSystemLibraryPaths (List
$ PrivateRuntimeLibraryPaths (List
$ PublicRuntimeLibraryPaths (List
$ PublicAdditionalLibraries (List
$ PublicPreBuildLibraries (List
$ PublicSystemLibraries (List
$ PublicFrameworks (List
$ PublicWeakFrameworks(List
$ PublicAdditionalFrameworks (List
$ AdditionalBundleResources (List
$ TypeLibraries (List
$ PublicDelayLoadDLLs (List
$ PrivateDefinitions (List
$ PublicDefinitions(List
$ DynamicallyLoadedModuleNames (List
$ RuntimeDependencies (RuntimeDependencyList): 런타임 시 이 모듈이 의존하는 파일의 목록입니다. 이 파일은 타깃과 함께 스테이징됩니다.
$ AdditionalPropertiesForReceipt (ReceiptPropertyList): 빌드를 받을 때 추가할 추가 프로퍼티 목록입니다.
$ PrecompileForTargets (PrecompileTargetsType): 이 모듈을 사전 컴파일해야 하는 타깃입니다.
$ ExternalDependencies (List
$ AdditionalCodeGenDirectories (List
$ SubclassRules (List
$ bRequiresImplementModule (Nullable
$ CppStandard (CppStandardVersion): 이 모듈을 컴파일하는 데 사용할 표준입니다.
$ ModuleSymbolVisibility (SymbolVisibility): 심볼 가시성을 제어합니다.
$ Name (String): 이 모듈의 이름입니다
$ OverridePackageType (PackageOverrideType): 서로 다른 패키지 플래그가 설정되는 모듈의 오버라이드 타입입니다. 모듈이 플러그인의 일부인 경우 이미 .uplugin
파일에 설정되어 있기 때문에 사용할 수 없습니다.
$ OptimizeCode (CodeOptimization): 이 모듈의 코드가 최적화되어야 하는 상황입니다.
$ PCHUsage (PCHUsageMode): 이 모듈의 사전 컴파일된 헤더 사용입니다
$ DefaultBuildSettings (BuildSettingsVersion): 기본적으로 어느 엔진 버전의 빌드 세팅을 사용하는지입니다.
$ ShadowVariableWarningLevel (WarningLevel): 섀도 변수 경고를 처리하는 방법입니다
$ UnsafeTypeCastWarningLevel (WarningLevel): 안전하지 않은 묵시적 타입 형변환 경고를 어떻게 처리할지입니다(예: double->float 또는 int64->int32)
$ bUseUnity (Boolean): Unity 빌드가 활성화되었고 이 특정 모듈이 Unity를 사용하여 빌드할 경우 이것을 사용하여 오버라이드할 수 있습니다. BuildConfiguration의 모듈별 환경설정을 사용하여 설정할 수 있습니다.
$ bLegacyPublicIncludePaths (Boolean): 이 모듈이 'Public' 폴더의 루트를 기준으로 다른 모듈에서 포함된 헤더에 적합한지 여부입니다. 이렇게 하면 컴파일러에 전달해야 하는 검색 경로의 수가 줄어들어, 퍼포먼스가 향상되고 컴파일러 명령줄 길이가 줄어듭니다.