⚙️

【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を使って以下のように記述します。

ConfigManagerLibrary.h
#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();
};
ConfigManagerLibrary.cpp
#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を確認し、以下のように記述します。

ConfigManagerLibrary.h
// ~~~省略~~~
UFUNCTION(BlueprintPure)
static FString GetCompanyName();
ConfigManagerLibrary.cpp
// ~~~省略~~~
FString UConfigManagerLibrary::GetCompanyName()
{
	FString CompanyName;
	GConfig->GetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("CompanyName"), CompanyName, GGameIni);
	return CompanyName;
}

int

例としてRenderingの設定で、Reflection Capture Resolutionを取得します。
今回はDefaultEngine.iniに記述されました。

ConfigManagerLibrary.h
// ~~~省略~~~
UFUNCTION(BlueprintPure)
static int32 GetReflectionCaptureResolution();
ConfigManagerLibrary.cpp
// ~~~省略~~~
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