- Unreal Engine의 초기 설정을 제공
- 간단한 수준에서 Section으로 구분되는 Key-Value를 제공
- 이 파일을 이용해 Build, Blatform에서 Engine 시작 시 Load되는 Object, Property의 Default 값이 설정된다.
- 확장자: .ini
구조
-
더보기
[SECTION1] <KEY1>=<VALUE1> <KEY2>=<VALUE2> [SECTION2] <KEY3>=<VALUE3>
- Key-Value 중 Value는 비워둬도 무방하다.
SectionName
- 임의의 알파벳 String
- Config System은 변수가 Code에 존재하는지와 무관하게 모든 Definition을 Load한다.
Module
-
더보기
[/Script/ModuleName.ClassName]
Plugin
- 더보기
[/Script/PluginName.ClassName]
Blueprint
-
더보기
[/PathToUAsset/UAssetName.UAssetName_C]
Custom Section Name
-
더보기
[MyConfigSection]
- Custom Section Name을 사용하면 Section 안에 포함된 Config 변수를 수동으로 Query해야 한다.
Comment
-
더보기
[Core.Log] ; 다음과 같은 줄을 사용해 DefaultEngine.ini 안에서 로그 카테고리별로 디스플레이 수준을 오버라이드하는 데 이 섹션을 사용할 수 있습니다. ; LogTemp=warning
Key-Value Pair
Array
- Config File의 Array는 여러 Config File에 걸쳐 정보를 통합/축적/오버라이드하는 매커니즘을 제공한다.
Empty
- 연산자: !
- Array의 Contents를 비웁니다.
- = 이후의 모든 값을 무시합니다.
Append
- 연산자: +
- Array에 값이 없다면 값을 추가한다.
- 값이 있다면 아무것도 안 한다.
Remove
- Array에서 값을 제거합니다.
- 값이 정확히 매칭되어야 합니다.
Append Duplicate
- Array에 값이 이미 존재하더라도 값을 배열에 추가합니다.
Array 사용 예시
-
더보기
MyConfigArray=7 !MyConfigArray=ClearArray +MyConfigArray=2 +MyConfigArray=3 +MyConfigArray=4 .MyConfigArray=2 -MyConfigArray=4
Append Duplicate를 사용하는 예시
- 대표적으로 그래픽 세팅이 있다.
- Default.ini에서 모든 플랫폼에 제공되는 그래픽 세팅을 추가
- [Platform].ini에서 각 플랫폼 별 제공하는 별도의 그래픽 세팅 추가
- 이 경우 게임 실행 시 Default.ini에 기재된 그래픽 세팅이 먼저 로딩 되고,
[Platform].ini에 기재된 세팅을 로드한다. - 이 때, Append Duplicate를 사용하면 [Platform].ini에서의 값이 Default.ini의 값을 오버라이드 하며 않고 확장한다.
- 그 결과 두 ini 파일에 기재된 값이 동시에 공존하게 된다.
Struct
-
더보기
[/Script/MyModule.MyClass] MyStruct=(MyStructProperty1=Value1,MyStructProperty2=Value2,...)
String
-
더보기
[Internationalization] ; 다음은 코어 엔진을 현지화하기 위한 경로이며, 현지화된 게임 콘텐츠 세팅은 *Game.ini 에 있습니다 +LocalizationPaths=../../../Engine/Content/Localization/Engine +CultureDisplayNameSubstitutes="ja;\u53f0\u6e7e;\u30c1\u30e3\u30a4\u30cb\u30fc\u30ba\u30bf\u30a4\u30da\u30a4" +CultureDisplayNameSubstitutes="\u53f0\u6e7e;\u4e2d\u534e\u53f0\u5317"
- 따옴표(", ")는 득수 escape 문자, 16진수, UTF 시퀀스의 사용을 지원한다.
- 이 점은 현지화/국제화에 유용하다.
- 따옴표(", ")는 득수 escape 문자, 16진수, UTF 시퀀스의 사용을 지원한다.
Project의 Config File
- 다음 2가지를 고려하며 작성해야 한다.
- Unreal Engine이 인식하는 Config File Category는 무엇인지
- 동일한 Category 내의 파일은 서로 어떻게 상호작용 하는지
Config File Category
Common
- Engine
- Game
- Input
- DeviceProfiles
- GameUserSettings
- Scalability
- RuntimeOptions
- InstallBundle
- Hardware
- GameplayTags
Editor-Only
- Editor
- EditorPerProjectUserSettings
- EditorSettings
- EditorKeyBindings
- EditorLayout
Desktop-Only
- Compat
- Lightmass
Config File Layer
- 각 Category에는 서로 다른 Config File이 있을 수 있다.
- ex)
- Engine/Config/BaseGame.ini
- Engine/Config/Window/WindowsGame.ini
- 위 두 File은 Game Config File Category에 속한다.
- 각 File은 추가 Customization Layer를 제공한다.
- 동일한 Category의 Config File은 Layer에 따라 정리가 된다.
- 동일한 Category의 File에 중복된 Key-Value Pair가 있는 경우,
Layer 상 뒤에 오는 파일이 앞에 오는 값을 override한다.
- 동일한 Category의 File에 중복된 Key-Value Pair가 있는 경우,
- Engine Directory에 저장된 Config File은 Engine 배포를 사용하는 모든 Project에 적용된다.
- <ProjectDirectory>에 위치한 Config File은 해당 Project에만 적용된다.
- <Platform>에 위치한 Config File은 해당 Platform에만 적용된다.
Category Config File 순서
- Engine/Config/Base.ini
- Engine/Config/Base<CATEGORY>.ini
- Engine/Config/<PLATFORM>/Base<PLATFORM><CATEGORY>.ini
- Engine/Platforms/<PLATFORM>/Config/Base<PLATFORM><CATEGORY>.ini
- <PROJECT_DIRECTORY>/Config/Default<CATEGORY>.ini
- Engine/Config/<PLATFORM>/<PLATFORM><CATEGORY>.ini
- Engine/Platforms/<PLATFORM>/Config/<PLATFORM><CATEGORY>.ini
- <PROJECT_DIRECTORY>/Config/<PLATFORM>/<PLATFORM><CATEGORY>.ini
- <PROJECT_DIRECTORY>/Platforms/<PLATFORM>/Config/<PLATFORM><CATEGORY>.ini
- <LOCAL_APP_DATA>/Unreal Engine/Engine/Config/User<CATEGORY>.ini
- <MY_DOCUMENTS>/Unreal Engine/Engine/Config/User<CATEGORY>.ini
- <PROJECT_DIRECTORY>/Config/User<CATEGORY>.ini
- 조금 더 자세한 정보는 Engine/Source/Runtime/Core/Public/Misc/ConfigHierarchy.h 파일 참고
Config Layer 예시
-
더보기
Engine/Config/BaseEngine.ini
[/Script/EngineSettings.GameMapsSettings] GameDefaultMap=/Engine/Maps/Templates/OpenWorld
MyExampleProject/Config/DefaultEngine.ini
[/Script/EngineSettings.GameMapsSettings] GameDefaultMap=/Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap
- 위 경우, Project의 DefaultEngine.ini가 Engine의 BaseEngine.ini보다 뒤에 오기 때문에
GameDefaultMap의 값은 ThirdPersonMap이 된다.
Code에서 Config 변수 사용
- Config File의 변수는 UPROPERTY, USTRUCT에 자동으로 적용하거나,
Config Manager에서 수동으로 값을 읽을 수 있다.
변수에 Config Setting 적용
자동
- Config File Layer 안에서 자동으로 값을 Load 하도록 Class 설정
Section Format
-
더보기
[/Script/ModuleName.ClassName]
- 여기서 ClassName은 U나 A 접두사를 제외한 클래스 이름이다.
자동으로 Config 변수를 Load
- 가정
- MyGameModule 안에 AMyConfigActor 클래스 배치
- AMyConfigActor 안에 Config File에서 변경하고 싶은 변수 MyConfigVariable이 있다 가정
- UClass 선언에서 읽어 올 Config File Category를 설정
- Config 할 수 있도록 클래스 내 내 멤버 변수에 Config 마킹
- 선택한 Config File Category의 Layer 어디든 변수를 설정한다.
- 예시
-
더보기
UCLASS(config=Game) class AMyConfigActor : public UObject { GENERATED_BODY() UPROPERTY(Config) int32 MyConfigVariable; }
[/Script/MyGameModule.MyConfigActor] MyConfigVariable=3
-
수동
Function
- Engine/Source/Runtime/Core/Public/Misc/ConfigCacheIni.h에서 다음 함수들 제공
- GetBool
- GetInt
- GetInt64
- GetFloat
- GetDouble
- GetString
- GetText
- GetArray
Config Category
- Config Category는 G<Category>Ini로 식변된다.
- 그 값은 Engine/Source/Runtime/Core/Public/CoreGlobals.h에 있다.
Config Setting 편집
- 다음 작업을 통해 Config Setting을 변경할 수 있다.
- 적절한 .ini 파일의 Config 값 수정
- Unreal Editor 내 Project Settings에 노출된 Config 값 수정
- 단, 모든 Config Setting이 Project Settings에 노출되지는 않는다.
Code의 Config Setting 저장
-
더보기
UCLASS(config=Game) class AMyConfigActor : public UObject { GENERATED_BODY() UPROPERTY(Config) int32 MyConfigVariable; }
AMyConfigActor *Settings = GetMutableDefault<AMyConfigActor>(); Settings->MyConfigVariable = 42;
FString PathToConfigFile; Settings->SaveConfig(CPF_Config, *PathToConfigFile);
Config 관련 Console Command
-
더보기
GetIni [Platform@]IniFile:Section Key
- 모든 Config Setting 값을 확인할 수 있다.
- 심지어 현재 사용중인 Platform 이외의 Platform Setting을 포함한 모든 Config 값을 볼 수 있다.
- 이 Command는 Load된 Config File만 검색한다.
- Load 되지 않은 Config File에 있는 Setting에 대한 Query는 실패할 수 있다.
특정 Config File의 Property Override
-
더보기
-ini:<CATEGORY>:[SECTION_1]:<KEY_1>=<VALUE_1>,[SECTION_2]:<KEY_2>=<VALUE_2>,...
Category의 Default File
-
더보기
-Def<CATEGORY>Ini=<FILE_NAME>
Category 내 모든 파일
-
더보기
-<CATEGORY>Ini=<FILE_NAME>
접미사가 일치하는 Config File
-
더보기
-iniFile=<PATH/TO/FILE_NAME>
모든 Config File
-
더보기
-IniBootstrap=<FILE_NAME>
Config File에서 Console 변수 설정
- Config File은 Console 변수를 명시할 수 있는 다른 Machanism을 제공한다.
- 일부 Console 변수는 일반 Config Category에서 설정될 수 있으며,
다른 Console 변수는 특정 Config Category에서 설정해야 합니다. - 일반적으로 Console 변수는 Project Directory 내 DefaultEngine.ini의 [ConsoleVariables] Section에서 설정된다.
특정 Category
- 특정 Section에서 설정되어야만 하는 특정 Category의 Console 변수가 있다.
Rendering
- Serction: /Script/Engine.RendererSettings
- r.로 시작하는 모든 Console 변수
Rendering Override
- Section: /Script/Engine/RenderOverrideSettings
- r.SupportAllShaderPermutations에만 해당
Streaming
- Section: /Script/Engine.StreamingSettings
- s.로 시작하는 모든 Console 변수
Garbage Collection
- Section: /Script/Engine.GarbageColectionSettings
- gc.로 시작하는 Console 변수
Network Settings
- Section: /Script/Engine.NetworkSettings
- n.VerifyPeer, p.EnableMultiplayerWorldOriginRebasing, NetworkEmulationProfiles에만 해당
Cooker Settings
- Section: /Script/UnrealEd.CookerSettings
- cook.으로 시작하는 Console 변수
추가 정보를 위한 유용한 Source File
- 다음 Engine file에서 Config System과 그 Component에 대한 추가 정보를 찾아볼 수 있다.
- ConfigCacheIni
- CoreGlobals
- ConfigHierarchy
'UE5 > Architecture' 카테고리의 다른 글
[Architecture] Version Control of Asset and Package (0) | 2024.05.07 |
---|---|
[Architecture] Command-line Arguments (0) | 2024.05.07 |
[Architecture] Task System (0) | 2024.05.06 |
[Architecture] Programming Subsystem (0) | 2024.05.06 |
[Architecture] String (0) | 2024.05.06 |