【UE5】ProjectSettingsの値を取得する
はじめに
ProjectSettingsの値を取得して、その値によって処理を分岐したくなったのでやってみました。
そんなに難しくないです。
開発環境
- Windows11
- UE5.4.4
解説
「Tools > New C++ Class」 からBlueprint Function Library
を選択してクラスを作成します。
クラス名はConfigManagerLibrary
にしました。
それぞれ取得したい値に応じて書き方が変わるので、以下でケースごとに説明します。
bool
例としてPackagingの設定で、Generate Chunksの値を取得してみます。
GenerateChunksを有効にすると、ConfigフォルダのDefaultGame.ini
に設定が書かれます。
この/Script/UnrealEd.ProjectPackagingSettings
というセクション名とbGenerateChunks
のkeyを使って以下のように記述します。
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "ConfigManagerLibrary.generated.h"
UCLASS()
class PROJECTSETTINGSTEST_API UConfigManagerLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
UFUNCTION(BlueprintPure)
static bool IsGenerateChunksEnable();
};
#include "ConfigManagerLibrary.h"
bool UConfigManagerLibrary::IsGenerateChunksEnable()
{
bool Enabled; // 結果を返す用の変数
GConfig->GetBool(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("bGenerateChunks"), Enabled, GGameIni);
return Enabled;
}
string
例としてDescriptionの設定で、Company Nameを取得します。
先ほどと同様に値を適当に設定して、セクション名とkeyを確認し、以下のように記述します。
// ~~~省略~~~
UFUNCTION(BlueprintPure)
static FString GetCompanyName();
// ~~~省略~~~
FString UConfigManagerLibrary::GetCompanyName()
{
FString CompanyName;
GConfig->GetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("CompanyName"), CompanyName, GGameIni);
return CompanyName;
}
int
例としてRenderingの設定で、Reflection Capture Resolutionを取得します。
今回はDefaultEngine.ini
に記述されました。
// ~~~省略~~~
UFUNCTION(BlueprintPure)
static int32 GetReflectionCaptureResolution();
// ~~~省略~~~
int32 UConfigManagerLibrary::GetReflectionCaptureResolution()
{
int32 Resolution;
GConfig->GetInt(TEXT("/Script/Engine.RendererSettings"), TEXT("r.ReflectionCaptureResolution"), Resolution, GEngineIni);
return Resolution;
}
調べ方
Configフォルダには様々なiniファイルが作成されますが、Get○○関数の第四引数を変えればそのファイルを参照することができます。
この指定すべき引数名はCoreGlobals.cpp
に定義されているので、こちらを見れば問題ないと思います。
そしてGet○○関数はConfigCacheIni.cpp
に定義されているので、こちらを見れば問題ないです。
画像にもColorとかVectorもありますね。
まとめ
よく使いそうなBuild Configurationを取得するノードは既に用意されているので、遭遇することはないかもしれませんが誰かの役に立てば幸いです。
Discussion