You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
159 lines
8.2 KiB
Plaintext
159 lines
8.2 KiB
Plaintext
INTSourceChangelist:2481343
|
|
Availability: Public
|
|
Title: 환경설정 파일
|
|
Crumbs: %ROOT%, Engine, Programming, Programming/Basics
|
|
Description:게임플레이나 엔진 작동방식 프로퍼티 세팅이 들어있는 텍스트 파일입니다.
|
|
Version: 4.5
|
|
|
|
|
|
[TOC (start:2 end:3)]
|
|
|
|
## 개요
|
|
|
|
환경설정 파일은 프로젝트 로드시 초기화시킬 프로퍼티에 대한 값을 설정하는 데 사용될 수 있습니다. 환경설정은 섹션별로 배치된 키-값 짝으로 이루어집니다.
|
|
주어진 키에 하나 이상의 값이 할당될 수 있습니다.
|
|
|
|
엔진 환경설정 파일은 오브젝트와 변수 기본값에 사용됩니다. 사용자 입력 환경설정 파일은 키 바인딩(지정)에 사용됩니다. 기본적으로 **프로젝트 마법사** 를 통해 빈 프로젝트를 생성하면,
|
|
`DefaultEngine.ini`, `DefaultGame.ini` 파일이 생성됩니다. 템플릿으로 새로 시작하는 프로젝트의 경우도 필요에 따라 `DefaultEditor.ini`, `DefaultInput.ini` 환경설정 파일이 생성될
|
|
수 있습니다.
|
|
|
|
`SaveConfig()` 함수는 [](Programming\UnrealArchitecture\Reference\Classes\Specifiers\Config) 클래스 지정자가 붙은 클래스에서 호출할 수 있습니다. 그러면
|
|
[](Programming\UnrealArchitecture\Reference\Properties\Specifiers\Config) 프로퍼티 지정자로 마킹된 프로퍼티를 적합한 환경설정 파일에 저장합니다. 일반적으로 `SaveConfig()` 로 저장된 변수는
|
|
**[(패키지).(클래스명)]** 형식을 따르는 섹션 제목에 들어갑니다. 예를 들어 `DefaultEngine.ini` 의 **[/Script/Engine.Engine]** 섹션은 Engine 패키지에 저장된 Engine 클래스를 가리킵니다.
|
|
하드코딩된 섹션 이름에는 예외가 있을 수 있습니다.
|
|
|
|
기존에 환경설정 파일의 편집을 통해서만 접할 수 있었던 여러가지 세팅은, 언리얼 에디터에서 [](Engine\UI\ProjectSettings) 에디터를 통해 접할 수 있습니다.
|
|
|
|
## 환경설정 변수 지정하기
|
|
|
|
환경설정 파일에서 어떤 변수를 읽어들일지 지정하기 위해서는, 해당 변수가 들어있는 클래스의 `UCLASS` 매크로에 `Config` 지정자를 먼저 붙여야 합니다.
|
|
|
|
UCLASS(Config=Game)
|
|
class AExampleClass : public AActor
|
|
|
|
[REGION:tip]
|
|
참고로 (Game 과 같은) 카테고리에는 반드시 `Config` 지정자가 붙어야 합니다. 그래야 클래스의 변수를 읽어들이고 저장할 환경설정 파일을 결정할 수 있습니다. 가능한 카테고리 모두
|
|
`FConfigCacheIni` 에 정의됩니다. 모든 환경설정 파일 카테고리 목록은, [환경설정 카테고리](#환경설정카테고리) 부분을 참고하시기 바랍니다.
|
|
[/REGION]
|
|
|
|
클래스에 `Config` 지정자를 붙이는 것은 그저 그 클래스가 환경설정 파일에서 읽어들일 변수가 있고, 어느 파일에서 환경설정을 읽어들일지를 나타낼 뿐입니다.
|
|
환경설정 파일에서 읽어들이고 저장할 변수를 지정하기 위해서는, `UPROPERTY()` 매크로에도 `Config` 지정자를 붙여줘야 합니다.
|
|
|
|
UCLASS(Config=Game)
|
|
class AExampleClass : public AActor
|
|
{
|
|
GENERATED_UCLASS_BODY()
|
|
|
|
UPROPERTY(Config)
|
|
float ExampleVariable;
|
|
|
|
};
|
|
|
|
프로퍼티의 `Config` 지정자이네느 카테고리가 붙지 않습니다. `ExampleVariable` 프로퍼티는 이제 [환경설정 파일 구조](#파일계층구조) 내 모든 `Game` 환경설정 파일에서 읽을 수 있게 되었습니다.
|
|
정보 지정을 위한 문법은 다음과 같습니다:
|
|
|
|
[/Script/ModuleName.ExampleClass]
|
|
ExampleVariable=0.0f
|
|
|
|
### 환경설정 파일과 상속
|
|
|
|
`UCLASS` 와 `UPROPERTY` 의 `Config` 지정자는 상속됩니다. 즉 자손 클래스는 부모 클래스에서 `Config` 으로 지정된 모든 변수를 읽어들이고 저장할 수 있으며,
|
|
같은 환경설정 파일 카테고리에 있게 된다는 뜻입니다. 변수는 모두 자손 클래스 이름과 같은 섹션 타이틀 아래 있게 됩니다. 예를 들어 위 `ExampleClass` 를 상속하는
|
|
`ChildExampleClass` 에 대한 환경설정 파일 정보는 다음과 같을 것이며, 같은 `Game` 환경설정 파일에 저장될 것입니다.
|
|
|
|
[/Script/ModuleName.ChildExampleClass]
|
|
ExampleVariable=0.0f
|
|
|
|
|
|
### 인스턴스별 환경설정
|
|
|
|
언리얼 엔진 4 에는 오브젝트의 환경설정을 원하는 DefaultInput.ini에 저장할 수 있는 능력이 있습니다. `UCLASS` 매크로에 `PerObjectConfig` 지정자가 사용된 경우,
|
|
이 클래스에 대한 환경설정 정보가 인스턴스별로 저장되며, 각 인스턴스는 `.ini` 파일에 `[오브젝트명 클래스명]` 형식으로 오브젝트 이름을 딴 섹션을 갖습니다.
|
|
이 키워드는 자손 클래스에 전파됩니다.
|
|
|
|
|
|
## 환경설정 파일 구조
|
|
|
|
각 환경설정 카테고리는 별도의 파일 계층구조가 있어, 엔진 전용, 프로젝트 전용, 플랫폼 전용 환경설정을 나타냅니다.
|
|
|
|
### 환경설정 카테고리
|
|
|
|
* Compat
|
|
* DeviceProfiles
|
|
* Editor
|
|
* EditorGameAgnostic
|
|
* EditorKeyBindings
|
|
* EditorUserSettings
|
|
* Engine
|
|
* Game
|
|
* Input
|
|
* Lightmass
|
|
* Scalability
|
|
|
|
### 파일 계층구조
|
|
|
|
환경설정 파일 계층구조는 `Base.ini` 로 시작해서 읽어들이며, 계층구조의 나중 파일에 있는 값이 앞선 값을 덮어씁니다. `Engine` 폴더에 있는 모든 파일은
|
|
모든 프로젝트에 적용되는 반면, 프로젝트 전용 세팅은 해당 프로젝트 디렉토리에 있을 것입니다. 마지막으로, 모든 프로젝트 전용과 플랫폼 전용 사이의 차이점은 `[ProjectDirectory]/Saved/Config/[Platform]/[Category].ini` 파일에 저장됩니다.
|
|
|
|
아래 파일 계층구조 예제는 환경설정 파일의 `Engine` 카테고리에 대한 것입니다.
|
|
|
|
1. `Engine/Config/Base.ini`
|
|
[REGION:tip]
|
|
`Base.ini` 는 보통 비어있습니다.
|
|
[/REGION]
|
|
1. `Engine/Config/BaseEngine.ini`
|
|
1. `Engine/Config/[Platform]/[Platform]Engine.ini`
|
|
1. `[ProjectDirectory]/Config/DefaultEngine.ini`
|
|
1. `[ProjectDirectory]/Config/[Platform]/[Platform]Engine.ini`
|
|
1. `[ProjectDirectory]/Saved/Config/[Platform]/Engine.ini`
|
|
[REGION:tip]
|
|
`Saved` 디렉토리에 있는 환경설정 파일은 환경설정 파일 스택 내 프로젝트 전용과 플랫폼 전용 사이의 차이점만 저장합니다.
|
|
[/REGION]
|
|
|
|
|
|
|
|
## 환경설정 파일 작업하기
|
|
|
|
|
|
### 파일 포맷
|
|
|
|
|
|
#### 섹션 및 키-값 짝
|
|
|
|
전형적인 환경설정 파일은 키-값 짝들로 이루어진 섹션들로 구성되며, 그 배치는 다음과 같습니다:
|
|
|
|
[섹션]
|
|
키=값
|
|
|
|
#### 특수 문자
|
|
|
|
* *+* - 해당 프로퍼티가 (기존 환경설정 파일 또는 같은 환경설정 파일의 앞부분에) 존재하지 않는 경우 줄을 추가합니다.
|
|
* *-* - 줄을 제거합니다(만 정확히 일치해야 합니다).
|
|
* *.* - 새 프로퍼티를 추가합니다.
|
|
* *!* - 프로퍼티를 제거합니다만, 정확히 일치할 필요는 없으며, 프로퍼티 이름만 맞으면 됩니다.
|
|
|
|
[REGION:note]
|
|
**주**: *.* 는 중복된 줄이 추가될 수 있다는 점만 빼고 *+* 와 비슷합니다. (DefaultInput.ini 에서 보듯이) 바인딩에 유용한 것으로, 가장 아래쪽의 바인딩만 효력을 발휘합니다. 예를 들어 다음과 같은 경우:
|
|
|
|
[/Script/Engine.PlayerInput]
|
|
Bindings=(Name="Q",Command="Foo")
|
|
.Bindings=(Name="Q",Command="Bar")
|
|
.Bindings=(Name="Q",Command="Foo")
|
|
|
|
정상 작동합니다. *+* 를 사용했다면 마지막 줄의 추가는 실패하여 바인딩이 잘못될 것입니다. 환경설정 파일 합침으로 인해, 위의 사용 패턴이 발생할 수 있습니다.
|
|
[/REGION]
|
|
|
|
#### 코멘트
|
|
|
|
대부분의 사람들이 세미콜론은 환경설정 파일의 코멘트를 나타낸다는 인상을 받는 듯 하지만, 그렇지 않습니다 (`FConfigFile::ProcessInputFileContents` 에서 세미콜론이나 다른 스트링을 코멘트 구분자로 실제 처리하는 부분은 없습니다). 이는 의도된 동작입니다. 기술적으로는 어떠한 글자도 다른 키-값 짝을 나타낼 수 있습니다. 전형적으로는, 새 줄 처음에 세미콜론을 찍는 것으로 코멘트처럼 쓰긴 하지만, 실제로는 그렇지 않습니다.
|
|
|
|
; 이것은 코멘트입니다.
|
|
; 이것도요!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|