언어:
페이지 정보
엔진 버전:
언리얼 엔진

환경설정 파일

언리얼 엔진

환경설정 파일은 프로젝트 로드시 초기화시킬 프로퍼티에 대한 값을 설정하는 데 사용될 수 있습니다. 환경설정은 섹션별로 배치된 키-값 짝으로 이루어집니다. 주어진 키에 하나 이상의 값이 할당될 수 있습니다.

엔진 환경설정 파일은 오브젝트와 변수 기본값에 사용됩니다. 사용자 입력 환경설정 파일은 키 바인딩(지정)에 사용됩니다. 기본적으로 프로젝트 마법사 를 통해 빈 프로젝트를 생성하면, DefaultEngine.ini, DefaultGame.ini 파일이 생성됩니다. 템플릿으로 새로 시작하는 프로젝트의 경우도 필요에 따라 DefaultEditor.ini, DefaultInput.ini 환경설정 파일이 생성될 수 있습니다.

SaveConfig() 함수는 Config 클래스 지정자가 붙은 클래스에서 호출할 수 있습니다. 그러면 Config 프로퍼티 지정자로 마킹된 프로퍼티를 적합한 환경설정 파일에 저장합니다. 일반적으로 SaveConfig() 로 저장된 변수는 [(패키지).(클래스명)] 형식을 따르는 섹션 제목에 들어갑니다. 예를 들어 DefaultEngine.ini 의 [/Script/Engine.Engine] 섹션은 Engine 패키지에 저장된 Engine 클래스를 가리킵니다. 하드코딩된 섹션 이름에는 예외가 있을 수 있습니다.

기존에 환경설정 파일의 편집을 통해서만 접할 수 있었던 여러가지 세팅은, 언리얼 에디터에서 프로젝트 세팅 에디터를 통해 접할 수 있습니다.

환경설정 변수 지정하기

환경설정 파일에서 어떤 변수를 읽어들일지 지정하기 위해서는, 해당 변수가 들어있는 클래스의 UCLASS 매크로에 Config 지정자를 먼저 붙여야 합니다.

UCLASS(Config=Game)
class AExampleClass : public AActor

(Game 과 같은) 카테고리에는 반드시 Config 지정자가 붙어야 합니다. 그래야 클래스의 변수를 읽어들이고 저장할 환경설정 파일을 결정할 수 있습니다. 가능한 카테고리 모두 FConfigCacheIni 에 정의됩니다. 모든 환경설정 파일 카테고리 목록은, 환경설정 카테고리 부분을 참고하시기 바랍니다.

클래스에 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

    Base.ini 는 보통 비어있습니다.

  2. Engine/Config/BaseEngine.ini

  3. Engine/Config/[Platform]/[Platform]Engine.ini

  4. [ProjectDirectory]/Config/DefaultEngine.ini

  5. [ProjectDirectory]/Config/[Platform]/[Platform]Engine.ini

  6. [ProjectDirectory]/Saved/Config/[Platform]/Engine.ini

    Saved 디렉터리에 있는 환경설정 파일은 환경설정 파일 스택 내 프로젝트 전용과 플랫폼 전용 사이의 차이점만 저장합니다.

환경설정 파일 작업하기

파일 포맷

섹션 및 키-값 짝

전형적인 환경설정 파일은 키-값 짝들로 이루어진 섹션들로 구성되며, 그 배치는 다음과 같습니다:

[섹션]
키=값

특수 문자

  • + - 해당 프로퍼티가 (기존 환경설정 파일 또는 같은 환경설정 파일의 앞부분에) 존재하지 않는 경우 줄을 추가합니다.

  • - - 줄을 제거합니다(만 정확히 일치해야 합니다).

  • . - 새 프로퍼티를 추가합니다.

  • ! - 프로퍼티를 제거합니다만, 정확히 일치할 필요는 없으며, 프로퍼티 이름만 맞으면 됩니다.

. 은 중복된 줄이 추가될 수 있다는 점만 빼고 + 와 비슷합니다. (DefaultInput.ini 에서 보듯이) 바인딩에 유용한 것으로, 가장 아래쪽의 바인딩만 효력을 발휘합니다. 예를 들어 다음과 같은 경우:

[/Script/Engine.PlayerInput]
Bindings=(Name="Q",Command="Foo")
.Bindings=(Name="Q",Command="Bar")
.Bindings=(Name="Q",Command="Foo")

정상 작동합니다. + 를 사용했다면 마지막 줄의 추가는 실패하여 바인딩이 잘못될 것입니다. 환경설정 파일 합침으로 인해, 위의 사용 패턴이 발생할 수 있습니다.

코멘트

대부분의 사람들이 세미콜론은 환경설정 파일의 코멘트를 나타낸다는 인상을 받는 듯 하지만, 그렇지 않습니다 (FConfigFile::ProcessInputFileContents 에서 세미콜론이나 다른 스트링을 코멘트 구분자로 실제 처리하는 부분은 없습니다). 이는 의도된 동작입니다. 기술적으로는 어떠한 글자도 다른 키-값 짝을 나타낼 수 있습니다. 전형적으로는, 새 줄 처음에 세미콜론을 찍는 것으로 코멘트처럼 쓰긴 하지만, 실제로는 그렇지 않습니다.

; 이것은 코멘트입니다.
; 이것도요!