概要
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 ファイルとセクションがあったとします。
[/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 から設定を取得するコード例。
[/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を取得するケースは少ないと思いますが、場合によって必要なこともあるかもしれません。