환경설정 파일(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"
프로젝트의 환경설정 파일
프로젝트에 환경설정 파일을 사용할 때 고려할 사항이 있습니다. 다음 두 가지가 중요합니다.
- 언리얼 엔진이 인식하는 환경설정 파일의 카테고리는 무엇인지
- 동일한 카테고리 내의 파일은 서로 어떻게 상호작용하는지
환경설정 파일 카테고리
언리얼 엔진은 몇 가지 일반적으로 '알려진' 환경설정 파일 카테고리를 인식합니다.
일반
EngineGameInputDeviceProfilesGameUserSettingsScalabilityRuntimeOptionsInstallBundleHardwareGameplayTags
에디터 전용
EditorEditorPerProjectUserSettingsEditorSettingsEditorKeyBindingsEditorLayout
데스크톱 전용
CompatLightmass
환경설정 파일 계층구조
각 카테고리에는 서로 다른 여러 환경설정 파일이 있을 수 있습니다. 예를 들어 Engine 디렉터리에는 다음 파일이 포함됩니다.
Engine\Config\BaseGame.iniEngine\Config\Windows\WindowsGame.ini
위 두 파일은 Game 환경설정 파일 카테고리에 속합니다. 각 파일은 추가 커스터마이제이션 레이어를 제공합니다.
동일한 카테고리의 환경설정 파일은 계층구조에 따라 정리됩니다. 동일한 카테고리의 파일에 중복된 키-값 쌍이 있는 경우, 계층구조의 뒤에 오는 파일이 앞에 오는 파일의 키-값 할당을 오버라이드합니다. Engine 디렉터리에 저장된 환경설정 파일은 이 엔진 배포를 사용하는 모든 프로젝트에 적용됩니다. <PROJECT_DIRECTORY> 에 위치한 환경설정 파일은 해당 프로젝트에만 적용됩니다. 마찬가지로 <PLATFORM> 에 위치한 환경설정 파일은 해당 플랫폼에만 적용됩니다.
카테고리 환경설정 파일은 다음 순서대로 로드됩니다.
Engine/Config/Base.iniEngine/Config/Base<CATEGORY>.iniEngine/Config/<PLATFORM>/Base<PLATFORM><CATEGORY>.iniEngine/Platforms/<PLATFORM>/Config/Base<PLATFORM><CATEGORY>.ini<PROJECT_DIRECTORY>/Config/Default<CATEGORY>.iniEngine/Config/<PLATFORM>/<PLATFORM><CATEGORY>.iniEngine/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 에 다음 함수가 있습니다.
GetBoolGetIntGetInt64GetFloatGetDoubleGetStringGetTextGetArray
환경설정 카테고리
환경설정 카테고리는 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