UE4 Configファイルから設定を取得する


概要

UnrealEngine4のConfigファイルの設定を取得するための方法メモです。

参考

以下の記事を参考にいたしました、ありがとうございます。
UE4公式:FConfigFile::GetString
設定ファイルのヒミツ
#Config Files, Read & Write to Config Files

環境

Windows10
Visual Studio 2017
UnrealEngine 4.26

Configファイルについて

UEエディタで設定されるプロジェクト設定などが入っているデータファイルです。
[Config]フォルダ以下に置かれています。

実行例

関連コード

"Engine\Source\Runtime\Core\Public\Misc\ConfigCacheIni.h"

FConfigFileを使った取得

例えば以下のような ini ファイルとセクションがあったとします。

DefaultEngine.ini
[/Script/Engine.Engine]
bAllowMultiThreadedAnimationUpdate=False
SmoothedFrameRateRange=(LowerBound=(Type=Inclusive,Value=20.000000),UpperBound=(Type=Exclusive,Value=60.000000))
bUseFixedFrameRate=True
FixedFrameRate=60.000000
DefaultTimecodeFrameRate=(Numerator=60,Denominator=1)

エディタで見ると以下のようになっています。

上記iniファイルから FixedFrameRate を取得する場合、GConfigから取得できます。以下コード例

サンプルコード
#include "Misc/ConfigCacheIni.h"

FString _FrameRate = FString(TEXT(""));

// 設定取得
bool _IsRet = GConfig->GetString(TEXT("/Script/Engine.Engine"), TEXT("FixedFrameRate"), _FrameRate, GEngineIni);

if( _IsRet ){
    UE_LOG(LogTemp, Log, TEXT("FrameRate = %s"), *_FrameRate);
}else{
    UE_LOG(LogTemp, Log, TEXT("??????"));
}

// 結果 > FrameRate = 60.000000 

上記例ではStringで取得していますが、GetInt GetFloat GetBool 等の型に応じてメソッドを使い分けて取得が可能です。

その他のiniファイルの取得

iniファイル名を切り替えると取得ができます。
エンジン用iniファイル名GEngineIni以外だと
GGameIni GInputIni GGameUserSettingsIni があり適宜設定の必要があります。
 
以下、DefaultGame.ini から設定を取得するコード例。

DefaultGame.ini
[/Script/EngineSettings.GeneralProjectSettings]
ProjectID=012345678901234567890123456789AB
ProjectName=MyTestProject
Description=マイテストプロジェクト
サンプルコード

FString _Description = FString(TEXT(""));
bool _Ret = GConfig->GetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("Description"), _Description, GGameIni);

UE_LOG(LogTemp, Log, TEXT("%s"), *_Description);

各Platformでの RuntimeSettings を使った取得

プラットフォームに応じた {Platform}RuntimeSetting モジュールがある場合、それを .uprojectに追加することで設定クラス経由で取得が可能なようです。

サンプル
#if PLATFORM_{Platform名}
#include "{Platform名}RuntimeSettings/Classes/{Platform名}RuntimeSettings.h"
#endif

static const U{Platform}RuntimeSettings* Settings = GetDefault<U{Platform}RuntimeSettings>();
if (Settings){
    // SampleString という設定を表示
    UE_LOG(LogTemp, Log, TEXT("%s"), *Settings->SampleString);
}


まとめ

FConfigFileクラスで設定を書き換えることも可能ですので、自作ツールで設定を書き換える場合使えるかも。Configを取得するケースは少ないと思いますが、場合によって必要なこともあるかもしれません。