언리얼 C++ 프로그래밍

[언리얼 C++] 환경설정 파일

언린이 2021. 8. 22. 11:27

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

 

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

 

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

예를 들어 DefaultEngine.ini 파일의 [/Script/Engine.Engine] 섹션은 Engine 패키지에 저장된 Engine 클래스를 가리킵니다. 하드코딩된 섹션 이름에는 예외가 있을 수 있습니다.

 

 

1. 환경설정 변수 지정하기

UCLASS(Config=Game)
class AExampleClass : public AActor

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

Config 지정자에 Game과 같은 카테고리를 반드시 붙여줘야 합니다. 그래야 클래스의 변수를 읽어들이고 저장할 환경설정 파일을 결정할 수 있습니다. 가능한 모든 카테고리는 FConfigCacheIni에 정의됩니다.

 

UCLASS(Config=Game)
class AExampleClass : public AActor
{
GENERATED_UCLASS_BODY()

UPROPERTY(Config)
float ExampleVariable;

};

클래스에 Config 지정자를 붙이는 것은 그저 그 클래스가 환경설정 파일에서 읽어들일 변수가 있고, 어느 파일에서 환경설정을 읽어들일지를 나타낼 뿐입니다. 환경설정 파일에서 읽어들이고 저장할 변수를 지정하기 위해서는, 위 예제 코드처럼 UPROPERTY() 매크로에도 Config 지정자를 붙여줘야 합니다. 프로퍼티의 Config 지정자에는 카테고리가 붙지 않습니다.

 

[/Script/ModuleName.ExampleClass]
ExampleVariable=0.0f

ExampleVariable 프로퍼티는 이제 환경설정 파일 구조 내 모든 Game 환경설정 파일에서 읽을 수 있게 되었습니다. 정보 지정을 위한 문법은 위와 같습니다.

 

  • 환경설정 파일과 상속
    UCLASS와 UPROPERTY의 Config 지정자는 상속됩니다. 즉 자손 클래스는 부모 클래스에서 Config로 지정된 모든 변수를 읽어들이고 저장할 수 있으며, 같은 환경설정 파일 카테고리에 있게 된다는 뜻입니다. 변수는 모두 자손 클래스 이름과 같은 섹션 타이틀 아래 있게 됩니다.

    [/Script/ModuleName.ChildExampleClass]
    ExampleVariable=0.0f
     예를 들어 ExampleClass를 상속하는 ChildExampleClass에 대한 환경설정 파일 정보는 위와 같을 것이며, 같은 Game 환경설정 파일에 저장될 것입니다.

  • 인스턴스별 환경설정
    언리얼 엔진 4에는 오브젝트의 환경설정을 원하는 DefaultInput.ini 파일에 저장할 수 있는 기능이 있습니다. UCLASS 매크로에 PerObjectConfig 지정자가 사용된 경우, 이 클래스에 대한 환경설정 정보가 인스턴스별로 저장되며, 각 인스턴스는 .ini 파일에 [오브젝트명 클래스명] 형식으로 오브젝트 이름을 딴 섹션을 갖습니다. 이 키워드는 자손 클래스에 전파됩니다.

 

 

2. 환경설정 파일 구조

각 환경설정 카테고리는 별도의 파일 계층구조가 있으며, 엔진 전용, 프로젝트 전용, 플랫폼 전용 환경설정을 나타냅니다.

 

  • 환경설정 카테고리
    • Compat
    • DeviceProfiles
    • Editor
    • EditorGameAgnostic
    • EditorKeyBindings
    • EditorUserSettings
    • Engine
    • Game
    • Input
    • Lightmass
    • Scalability

  • 파일 계층구조
    환경설정 파일 계층구조는 Base.ini 파일로 시작해서 읽어들이며, 계층구조의 나중 파일에 있는 값이 앞선 값을 덮어씁니다. Engine 폴더에 있는 모든 파일은 모든 프로젝트에 적용되는 반면, 프로젝트 전용 세팅은 해당 프로젝트 디렉터리에 있을 것입니다. 마지막으로, 모든 프로젝트 전용과 플랫폼 전용 사이의 차이점은 [ProjectDirectory]/Saved/Config/[Platform]/[Category].ini 파일에 저장됩니다.

    아래 파일 계층구조 예제는 환경설정 파일의 Engine 카테고리에 대한 것입니다.
    • Engine/Config/Base.ini
    • Engine/Config/BaseEngine.ini
    • Engine/Config/[Platform]/[Platform]Engine.ini
    • [ProjectDirectory]/Config/DefaultEngine.ini
    • [ProjectDirectory]/Config/[Platform]/[Platform]Engine.ini
    • [ProjectDirectory]/Saved/Config/[Platform]/Engine.ini