• 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

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 시퀀스의 사용을 지원한다.
      • 이 점은 현지화/국제화에 유용하다.

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한다.
  • Engine Directory에 저장된 Config File은 Engine 배포를 사용하는 모든 Project에 적용된다.
  • <ProjectDirectory>에 위치한 Config File은 해당 Project에만 적용된다.
  • <Platform>에 위치한 Config File은 해당 Platform에만 적용된다.

Category Config File 순서

  1. Engine/Config/Base.ini
  2. Engine/Config/Base<CATEGORY>.ini
  3. Engine/Config/<PLATFORM>/Base<PLATFORM><CATEGORY>.ini
  4. Engine/Platforms/<PLATFORM>/Config/Base<PLATFORM><CATEGORY>.ini
  5. <PROJECT_DIRECTORY>/Config/Default<CATEGORY>.ini
  6. Engine/Config/<PLATFORM>/<PLATFORM><CATEGORY>.ini
  7. Engine/Platforms/<PLATFORM>/Config/<PLATFORM><CATEGORY>.ini
  8. <PROJECT_DIRECTORY>/Config/<PLATFORM>/<PLATFORM><CATEGORY>.ini
  9. <PROJECT_DIRECTORY>/Platforms/<PLATFORM>/Config/<PLATFORM><CATEGORY>.ini
  10. <LOCAL_APP_DATA>/Unreal Engine/Engine/Config/User<CATEGORY>.ini
  11. <MY_DOCUMENTS>/Unreal Engine/Engine/Config/User<CATEGORY>.ini
  12. <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이 있다 가정
  1. UClass 선언에서 읽어 올 Config File Category를 설정
  2. Config 할 수 있도록 클래스 내 내 멤버 변수에 Config 마킹
  3. 선택한 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

Category 내 모든 파일

접미사가 일치하는 Config File

모든 Config File

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

+ Recent posts