환경설정 파일(Configuration Files) 은 언리얼 엔진(Unreal Engine, UE) 의 초기 설정을 제공합니다. 가장 기본적인 수준에서는 섹션으로 구분된 키-값 쌍의 목록이 들어 있습니다. 이 파일을 사용하여 모든 빌드와 플랫폼에서 언리얼 엔진 시작 시 로드되는 오브젝트와 프로퍼티의 디폴트값이 설정됩니다. 환경설정 파일의 확장자는 .ini
입니다.
구문
환경설정 파일은 다음 구조를 따릅니다.
[SECTION1]
<KEY1>=<VALUE1>
<KEY2>=<VALUE2>
[SECTION2]
<KEY3>=<VALUE3>
모든 환경설정 변수는 하나의 [SECTION]
에 포함되어야 하며 KEY
와 그 뒤의 =
심볼로 구성됩니다. 예를 들어 BaseEngine.ini
에는 다음 내용이 있습니다.
[Core.Log]
LogTemp=warning
환경설정 변수의 VALUE
는 비워두어도 되므로 다음과 같이 작성할 수도 있습니다.
[Core.Log]
LogTemp=
섹션 이름
섹션 이름은 임의의 값으로 설정할 수 있는 알파벳 스트링입니다. 환경설정 시스템은 환경설정 변수가 프로젝트 코드에 존재하는지 여부와 관계없이 환경설정 파일의 모든 선언을 로드합니다.
모듈
모듈에 포함된 환경설정할 수 있는 오브젝트의 섹션 헤더는 다음 구문을 사용합니다.
[/Script/ModuleName.ClassName]
설명은 다음과 같습니다.
ModuleName
: 환경설정할 수 있는 오브젝트를 포함하는 모듈의 이름입니다.ClassName
: 환경설정할 수 있는 오브젝트를 포함하는ModuleName
모듈 안에 있는 클래스의 이름입니다.
플러그인
플러그인에 포함된 환경설정할 수 있는 오브젝트의 섹션 헤더는 다음 구문을 사용합니다.
[/Script/PluginName.ClassName]
설명은 다음과 같습니다.
PluginName
: 환경설정할 수 있는 오브젝트를 포함하는 플러그인의 이름입니다.ClassName
: 환경설정할 수 있는 오브젝트를 포함하는PluginName
플러그인 안에 있는 클래스의 이름입니다.
블루프린트
블루프린트에 포함된 환경설정할 수 있는 에셋의 섹션 헤더는 다음 구문을 사용합니다.
[/PathToUAsset/UAssetName.UAssetName_C]
설명은 다음과 같습니다.
PathToUAsset
: 에셋의 경로입니다.UAssetName
: 환경설정할 수 있는 오브젝트를 포함하는PathToUAsset
내 에셋의 이름입니다.
커스텀 섹션 이름
커스텀 카테고리 이름에는 알파벳 스트링을 사용할 수 있습니다. 예를 들어 카테고리 이름을 "MyConfigSection"으로 설정하려면 다음과 같이 작성합니다.
[MyConfigSection]
커스텀 섹션 이름을 사용하면 섹션 안에 포함된 환경설정 변수를 수동으로 쿼리해야 합니다. 자세한 정보는 변수에 수동으로 환경설정 세팅 적용 섹션을 참고하세요.
코멘트
줄 앞에 세미콜론( ;
)을 붙여 환경설정 파일 내에 코멘트를 작성할 수 있습니다. 키-값 쌍을 파일에서 삭제하지 않고 코멘트로 전환해 둘 수도 있습니다.
[Core.Log]
; 다음과 같은 줄을 사용해 DefaultEngine.ini 안에서 로그 카테고리별로 디스플레이 수준을 오버라이드하는 데 이 섹션을 사용할 수 있습니다.
; LogTemp=warning
키-값 쌍
환경설정 키는 다양한 타입의 정보를 나타낼 수 있습니다.
- 스트링
- 숫자
- 배열
- 구조체
배열
환경설정 파일의 배열 구조체는 환경설정 파일 계층구조의 여러 환경설정 파일에 걸쳐 정보를 통합하고, 축적하고, 오버라이드할 수 있는 메커니즘을 제공합니다. 예를 들어, 엔진 디렉터리의 BaseEngine.ini
및 DefaultEngine.ini
파일과 프로젝트 디렉터리의 DefaultEngine.ini
파일 등 계층구조 내 여러 파일에 걸쳐 하나의 환경설정 배열 오브젝트에 여러 엔트리를 추가할 수 있습니다.
환경설정 파일은 다음 배열 연산을 지원합니다.
*이름 | 연산자 | 설명 | 예시 |
---|---|---|---|
비우기(Empty) | ! |
배열의 콘텐츠를 비웁니다. = 이후의 모든 값은 무시합니다. 알아보기 쉽도록 !MyVar=ClearArray 와 같이 = 이후에 설명이 담긴 값을 넣는 것이 좋습니다. |
!MyArray=ClearArray |
추가(Append) | + |
배열에 값이 이미 존재하지 않는다면 값을 추가합니다. 값이 이미 배열에 존재하는 경우 아무것도 하지 않습니다. | +MyArray=Value |
제거(Remove) | - |
배열에서 값을 제거합니다. 값이 정확히 매칭되어야 합니다. | -MyArray=Value |
복제 추가(Append Duplicate) | . |
배열에 값이 이미 존재하더라도 값을 배열에 추가합니다. | .MyArray=Value |
배열 예시
MyConfigArray=7
!MyConfigArray=ClearArray
+MyConfigArray=2
+MyConfigArray=3
+MyConfigArray=4
.MyConfigArray=2
-MyConfigArray=4
이 예시의 각 줄은 다음 연산을 수행합니다.
MyConfigArray=7
: 배열의 모든 것을 제거하고 7을 추가합니다.!MyConfigArray=ClearArray
: 배열의 모든 엔트리를 지웁니다.+MyConfigArray=2
: 배열에 2를 추가합니다.+MyConfigArray=3
: 배열에 3을 추가합니다.+MyConfigArray=4
: 배열에 4를 추가합니다..MyConfigArray=2
: 중복 여부와 관계없이 배열에 2를 추가합니다.-MyConfigArray=4
: 배열에서 4를 제거합니다.
결과적으로 MyConfigArray
에는 [2,3,2]
가 포함됩니다.
구조체
환경설정 파일은 환경설정 오브젝트의 구조체 프로퍼티 변경을 지원합니다. 구조체를 설정하는 구문은 다음과 같습니다.
[/Script/MyModule.MyClass]
MyStruct=(MyStructProperty1=Value1,MyStructProperty2=Value2,...)
스트링
따옴표는 특수 이스케이프 문자, 16진수, UTF 시퀀스의 사용을 지원합니다. 이 점은 현지화 및 국제화에 유용합니다. 예를 들어, BaseEngine.ini
에는 다음 섹션이 포함되어 있습니다.
[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"
프로젝트의 환경설정 파일
프로젝트에 환경설정 파일을 사용할 때 고려할 사항이 있습니다. 다음 두 가지가 중요합니다.
- 언리얼 엔진이 인식하는 환경설정 파일의 카테고리는 무엇인지
- 동일한 카테고리 내의 파일은 서로 어떻게 상호작용하는지
환경설정 파일 카테고리
언리얼 엔진은 몇 가지 일반적으로 '알려진' 환경설정 파일 카테고리를 인식합니다.
일반
Engine
Game
Input
DeviceProfiles
GameUserSettings
Scalability
RuntimeOptions
InstallBundle
Hardware
GameplayTags
에디터 전용
Editor
EditorPerProjectUserSettings
EditorSettings
EditorKeyBindings
EditorLayout
데스크톱 전용
Compat
Lightmass
환경설정 파일 계층구조
각 카테고리에는 서로 다른 여러 환경설정 파일이 있을 수 있습니다. 예를 들어 Engine
디렉터리에는 다음 파일이 포함됩니다.
Engine\Config\BaseGame.ini
Engine\Config\Windows\WindowsGame.ini
위 두 파일은 Game
환경설정 파일 카테고리에 속합니다. 각 파일은 추가 커스터마이제이션 레이어를 제공합니다.
동일한 카테고리의 환경설정 파일은 계층구조에 따라 정리됩니다. 동일한 카테고리의 파일에 중복된 키-값 쌍이 있는 경우, 계층구조의 뒤에 오는 파일이 앞에 오는 파일의 키-값 할당을 오버라이드합니다. Engine
디렉터리에 저장된 환경설정 파일은 이 엔진 배포를 사용하는 모든 프로젝트에 적용됩니다. <PROJECT_DIRECTORY>
에 위치한 환경설정 파일은 해당 프로젝트에만 적용됩니다. 마찬가지로 <PLATFORM>
에 위치한 환경설정 파일은 해당 플랫폼에만 적용됩니다.
카테고리 환경설정 파일은 다음 순서대로 로드됩니다.
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
헤더 파일을 참고하세요.
계층구조 예시
계층구조가 작동하는 방식을 설명하기 위해, MyExampleProject
라는 프로젝트가 있고 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
이러면 프로젝트 디렉터리의 DefaultEngine.ini
파일이 엔진 디렉터리의 BaseEngine.ini
파일보다 뒤에 오기 때문에, 프로젝트 시작 시 GameDefaultMap
의 값은 /Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap
이 됩니다.
코드에 환경설정 변수 사용
환경설정 변수는 UPROPERTIES
와 USTRUCTS
에 자동으로 적용하거나 환경설정 매니저에서 수동으로 읽어 올 수 있습니다.
변수에 환경설정 세팅 적용
자동으로 적용
환경설정 파일 계층구조 안에서 자동으로 값을 로드하도록 클래스를 정의할 수 있습니다.
섹션 포맷
모듈 코드에 자동으로 환경설정 세팅을 로드하려면 [Section]
포맷을 다음과 같이 작성합니다.
[/Script/ModuleName.ClassName]
설명은 다음과 같습니다.
ModuleName
은ClassName
클래스가 정의된 모듈의 이름입니다.ClassName
은 해당 변수가 정의된 클래스의 이름입니다.
ClassName
은 U
또는 A
접두사를 제외한 클래스 이름입니다.
자동으로 환경설정 변수를 로드하는 단계
MyGameModule
모듈 안에 AMyConfigActor
클래스가 있고, AMyConfigActor
안에 환경설정 파일에서 변경하고 싶은 멤버 변수 MyConfigVariable
이 있다고 합시다.
-
UCLASS
선언에서 읽을 환경설정 파일 카테고리를 환경설정합니다. 이 예시는Game
카테고리를 사용합니다.UCLASS(config=Game) class AMyConfigActor : public UObject
-
환경설정할 수 있도록 설정할 클래스 내 멤버 변수를
Config
로 마킹합니다.UPROPERTY(Config) int32 MyConfigVariable;
-
선택한 환경설정 파일 카테고리의 계층구조 어느 곳에서든 앞의 변수를 설정합니다. 예를 들어, 이 예시에서는
Game
카테고리를 사용하므로 프로젝트 디렉터리 내DefaultGame.ini
안에서 다음 환경설정을 설정할 수 있습니다.[/Script/MyGameModule.MyConfigActor] MyConfigVariable=3
클래스는 다음과 같은 모습이어야 합니다.
UCLASS(config=Game)
class AMyConfigActor : public UObject
{
GENERATED_BODY()
UPROPERTY(Config)
int32 MyConfigVariable;
}
수동으로 적용
앞에서 언급한 대로 환경설정 시스템은 C++ 코드에 실제 환경설정 변수가 존재하는지 여부와 관계없이 환경설정 파일의 모든 선언을 로드합니다. 따라서 모든 섹션에서 환경설정 변수를 쿼리할 수 있습니다. 예를 들어 DefaultGame.ini
에는 다음 환경설정이 있을 수 있습니다.
[MyCategoryName]
MyVariable=2
다음 코드를 통해 원하는 모든 파일에서 이 값을 읽을 수 있습니다.
int MyConfigVariable;
GConfig->GetInt(TEXT("MyCategoryName"), TEXT("MyVariable"), MyConfigVariable, GGameIni);
이제 게임 코드의 MyConfigVariable
값은 2입니다.
수동 읽기 옵션
변수를 얻을 수 있는 다양한 함수와, 변수를 가져올 다양한 환경설정 파일 카테고리가 있습니다.
함수
Engine/Source/Runtime/Core/Public/Misc
에 있는 ConfigCacheIni.h
에 다음 함수가 있습니다.
GetBool
GetInt
GetInt64
GetFloat
GetDouble
GetString
GetText
GetArray
환경설정 카테고리
환경설정 카테고리는 G<CATEGORY>Ini
로 식별됩니다. 예를 들어 Engine
카테고리는 GEngineIni
로 레퍼런스됩니다. 값은 Engine/Source/Runtime/Core/Public
에 있는 CoreGlobals.h
에 있습니다.
환경설정 세팅 편집
다음 작업을 통해 환경설정 세팅을 변경할 수 있습니다.
- 적절한
.ini
파일의 환경설정 값 수정 - 언리얼 에디터 내 프로젝트 세팅(Project Settings) 에 노출된 환경설정 값 수정
언리얼 에디터 내 프로젝트 세팅(Project Settings) 에 모든 환경설정 세팅이 노출되는 것은 아닙니다.
코드의 환경설정 세팅 저장
SaveConfig
를 통해 게임 코드의 환경설정 세팅을 저장할 수 있습니다.
환경설정 저장 예시
자동으로 환경설정 변수를 로드하는 단계 섹션의 예시와 동일한 코드를 가지고 있다고 합시다.
UCLASS(config=Game)
class AMyConfigActor : public UObject
{
GENERATED_BODY()
UPROPERTY(Config)
int32 MyConfigVariable;
}
코드 내 어딘가에서 이 환경설정 변수를 수정합니다.
AMyConfigActor *Settings = GetMutableDefault<AMyConfigActor>();
Settings->MyConfigVariable = 42;
절대 경로 PathToConfigFile
을 통해 환경설정 파일에 이 새로운 환경설정 값을 다음과 같이 저장할 수 있습니다.
FString PathToConfigFile;
Settings->SaveConfig(CPF_Config, *PathToConfigFile);
관련 콘솔 명령
GetIni
콘솔 명령을 통해 모든 환경설정 세팅 값을 확인할 수 있습니다. 이 명령으로는 현재 사용 중인 플랫폼 이외의 플랫폼 세팅을 포함한 모든 환경설정 세팅의 값을 볼 수 있습니다. 이 명령은 로드된 환경설정 파일만 검색하므로, 로드되지 않은 환경설정 파일에 있는 세팅에 대한 쿼리는 실패할 수 있습니다
명령
GetIni [Platform@]IniFile:Section Key
Platform@
실행인자는 선택적입니다. 제공하지 않으면 디폴트 Platform
은 현재 사용 중인 플랫폼입니다.
예시
Windows에서 Engine
계층구조의 URL
섹션에 있는 Protocol
키의 값을 찾으려면 다음을 실행합니다.
GetIni Windows@Engine:URL Protocol
명령줄에서 환경설정 오버라이드
언리얼 엔진에서는 명령줄 실행인자를 통해 환경설정 세팅을 오버라이드할 수 있는 메커니즘을 제공합니다.
명령줄 오버라이드는 배열에 적용할 수 없습니다.
특정 환경설정 파일 프로퍼티
명령
-ini:<CATEGORY>:[SECTION_1]:<KEY_1>=<VALUE_1>,[SECTION_2]:<KEY_2>=<VALUE_2>,...
설명
지정된 KEY
를 환경설정 파일 CATEGORY
의 주어진 SECTION
에 포함된 해당 VALUE
로 오버라이드합니다. 사용할 수 있는 환경설정 파일 카테고리의 전체 목록은 이 페이지의 환경설정 파일 카테고리 섹션을 참고하세요
예시
-ini:Engine:[/Script/Engine.Engine]:bSmoothFrameRate=False,[TextureStreaming]:PoolSize=100
이전 값과 관계없이 Engine
카테고리 계층구조의 [/Script/Engine.Engine]
섹션에 포함된 bSmoothFrameRate
의 값을 오버라이드합니다. PoolSize
도 마찬가지입니다.
카테고리의 디폴트 파일
명령
-Def<CATEGORY>Ini=<FILE_NAME>
설명
오버라이드하려는 특정 환경설정 파일 타입이 CATEGORY
일 때 Default<CATEGORY>.ini
파일을 <FILE_NAME>
으로 오버라이드합니다. 사용할 수 있는 환경설정 파일 카테고리의 전체 목록은 이 페이지의 환경설정 파일 카테고리 섹션을 참고하세요
예시
-DefGameIni=FooGame.ini
FooGame.ini
가 DefaultGame.ini
환경설정 파일을 오버라이드합니다. 사용할 수 있는 환경설정 파일 카테고리의 전체 목록은 이 페이지의 환경설정 파일 카테고리 섹션을 참고하세요
카테고리 내 모든 파일
명령
-<CATEGORY>Ini=<FILE_NAME>
설명
주어진 CATEGORY
내 모든 환경설정 파일을 오버라이드합니다. 사용할 수 있는 환경설정 파일 카테고리의 전체 목록은 이 페이지의 환경설정 파일 카테고리 섹션을 참고하세요
예시
-EngineIni=FooEngine.ini
FooEngine.ini
가 다른 모든 *Engine.ini
파일을 오버라이드합니다. 사용할 수 있는 환경설정 파일 카테고리의 전체 목록은 이 페이지의 환경설정 파일 카테고리 섹션을 참고하세요
접미사가 일치하는 환경설정 파일
명령
-iniFile=<PATH/TO/FILE_NAME>
설명
접미사 경로가 일치하는 모든 환경설정 파일을 오버라이드합니다.
이 명령을 사용하려면 경로의 접미사 디렉터리 구조가 환경설정 파일의 엔진 디렉터리 구조와 매칭되어야 합니다.
예시
-iniFile=C:/MyAdditionalConfigFiles/Engine/Config/BaseEngine.ini
C:/MyAdditionalConfigFiles/Engine/Config/BaseEngine.ini
overrides the configuration file <PROJECT_DIRECTORY>/Engine/Config/BaseEngine.ini
. 사용할 수 있는 환경설정 파일 카테고리의 전체 목록은 이 페이지의 환경설정 파일 카테고리 섹션을 참고하세요
모든 환경설정 파일
명령
-IniBootstrap=<FILE_NAME>
설명
로드되고 파싱되는 모든 환경설정 파일을 오버라이드합니다. 읽기 전용입니다.
예시
-IniBootstrap=Foo.ini
환경설정 파일 중 Foo.ini
만 로드되고 나머지는 로드되지 않습니다.
환경설정 파일에서 콘솔 변수 설정
환경설정 파일은 콘솔 변수를 명시할 수 있는 다른 메커니즘을 제공합니다. 일부 콘솔 변수는 일반 환경설정 카테고리에서 설정될 수 있으며 다른 콘솔 변수는 특정 환경설정 카테고리에서 설정해야 합니다. 일반적으로 콘솔 변수는 프로젝트 디렉터리 내 DefaultEngine.ini
의 [ConsoleVariables]
섹션에서 설정됩니다.
특정 카테고리
아래 표에 특정 섹션에서 설정되어야 하는 특정 카테고리의 콘솔 변수가 설명되어 있습니다.
타입 | 섹션 | 설명 |
---|---|---|
Rendering | [/Script/Engine.RendererSettings] |
r. 로 시작하는 모든 콘솔 변수입니다. |
Rendering Override | [/Script/Engine.RendererOverrideSettings] |
콘솔 변수 r.SupportAllShaderPermutations 에만 해당됩니다. |
Streaming | [/Script/Engine.StreamingSettings] |
s. 로 시작하는 모든 콘솔 변수입니다. |
Garbage Collection | [/Script/Engine.GarbageCollectionSettings] |
gc. 로 시작하는 모든 콘솔 변수입니다. |
Network Settings | [/Script/Engine.NetworkSettings] |
콘솔 변수 n.VerifyPeer , p.EnableMultiplayerWorldOriginRebasing , NetworkEmulationProfiles 에만 해당됩니다. |
Cooker Settings | [/Script/UnrealEd.CookerSettings] |
cook. 으로 시작하는 모든 콘솔 변수입니다. |
추가 정보를 위한 유용한 소스 파일
다음 엔진 파일에서 환경설정 시스템과 그 컴포넌트에 대한 추가 정보를 찾아볼 수 있습니다.
- ConfigCacheIni
- CoreGlobals
- ConfigHierarchy