今回は、C++でエディタ機能を拡張して「エディタの環境設定」や「プロジェクト設定」ウィンドウ内に、独自の項目を追加する方法をご紹介します。
いきなりですが、ソースコードです。
まずは、設定項目をプロパティとして保持するクラスを用意します。
デフォルト値はコンストラクタで設定しておきましょう。
#pragma once #include "MyEditorSetting.generated.h" UCLASS(config=Editor, defaultconfig) // ※1 class UMyEditorSetting : public UObject { GENERATED_UCLASS_BODY() public: UPROPERTY(EditAnywhere, config, Category=MySetting) bool Check0; UPROPERTY(EditAnywhere, config, Category = MySetting) int32 Value0; };
#include "MyProject.h" #include "MyEditorSetting.h" UMyEditorSetting::UMyEditorSetting(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) , Check0(true) , Value0(123) { }
続いて、このクラスをSettingModuleに登録します。
これは、モジュールのStartupModule()とShutdownModule()をオーバーライドして行います。
#include "MyProject.h" #include "ISettingsModule.h" #include "MyEditorSetting.h" #define LOCTEXT_NAMESPACE "" class FMyProjectModule : public FDefaultGameModuleImpl { virtual void StartupModule() override; virtual void ShutdownModule() override; }; IMPLEMENT_PRIMARY_GAME_MODULE(FMyProjectModule, MyProjectModule, "MyProject" ); void FMyProjectModule::StartupModule() { if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings")) { SettingsModule->RegisterSettings( "Editor", // ※2 "MySettingCategory", "MySetting", LOCTEXT("MySettingName", "MySetting"), LOCTEXT("MySettingDescription", "My setting discription"), GetMutableDefault() ); } } void FMyProjectModule::ShutdownModule() { if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings")) { SettingsModule->UnregisterSettings( "Editor", // ※3 "MySettingCategory", "MySetting" ); } } #undef LOCTEXT_NAMESPACE
これで、エディタを起動して「エディタの環境設定」を開くと、↓のように項目が追加されています。
また、この場合、設定した内容は DefaultEditor.ini に保存されます。
保存先を変えたい場合は、ソースコードの※1の箇所を編集します。
config=Editor なので、保存先が DefaultEditor.ini になっています。
config=Engine であれば、保存先は DefaultEngine.ini になります。
同じように「プロジェクト設定」に項目を追加したい場合は、※2,※3の箇所を、”Editor”から”Project”に変更すればOKです。
ここで設定した値は、下記のようにC++コード中から参照できます。
const UMyEditorSetting* MyEditorSettings = GetDefault<UMyEditorSetting>(); MyEditorSettings->Check0; MyEditorSettings->Value0;
エディタ拡張やプラグイン機能のオプション化など、様々な使い道があると思います。
是非お試し下さい。