自定义项目设置
自定义项目设置的方式有两种。
1.继承UObject;
2.继承UDeveloperSettings;这个用起来更方便
@UDeveloperSettings方法
在创建C++类时选择全部类型,选择继承UDeveloperSettings
UCLASS中的config字段是配置文件的分类,可以用一个自定义的字符XXX。会在saved/config文件夹生成对应的XXX.ini文件

需要进行配置的参数需要用UPROPERTY(config,EditAnywhere)标记
怎么使用这里面的数据呢?
两种方式:
1 const UZHDeveloperSettings* Setting = GetDefault<UZHDeveloperSettings>();
2 因为是const的缘故,所以只能在代码中获取不能修改(可能有修改方式只是不知道)
3
4 UZHDeveloperSettings* Setting = GetMutableDefault<UZHDeveloperSettings>();
5 GetMutableDefault() 是GetDefault()的可修改版本。(这不就知道了)



编译问题
error LNK2019: 无法解析的外部符号 "
用UDeveloperSettings 类不加模块引用不能编译

@继承UObject方法
1 //先准备好命名 2 const FName UDisplayClusterEditorSettings::Container = TEXT("Project"); 3 const FName UDisplayClusterEditorSettings::Category = TEXT("Plugins"); 4 const FName UDisplayClusterEditorSettings::Section = TEXT("nDisplay"); 5 6 //在StartupModule()函数中调用RegisterSettings()函数 7 void FDisplayClusterEditorModule::RegisterSettings() 8 { 9 //通过FModuleManager获取到ISettingsModule接口,并调用接口函数进行注册 10 if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings")) 11 { 12 SettingsModule->RegisterSettings( 13 UDisplayClusterEditorSettings::Container, 14 UDisplayClusterEditorSettings::Category, 15 UDisplayClusterEditorSettings::Section, 16 LOCTEXT("RuntimeSettingsName", "nDisplay"), 17 LOCTEXT("RuntimeSettingsDescription", "Configure nDisplay"), 18 GetMutableDefault<UDisplayClusterEditorSettings>() 19 ); 20 } 21 }
//在ISettingsModule接口内还有一个UnRegisterSettings函数可以取消注册
同样的,要配置的参数也要用UPROPERTY(config,EditAnywhere)标记
怎么使用这里面的数据呢?
获取参数的方式和UDeveloperSettings是一样的方法,GetDefault()
打包问题:
进一步了解一下ISettingsModule 这个接口和Container容器、Category分类、Section部件/栏这三个词
先找到ISettingsModule.h文件
1 ISettingsModule.h文件
2
3 class ISettingsContainer;
4 class ISettingsSection;
5 class ISettingsViewer;
6 class SWidget;
Container:容器
1 //这里代码太长了 2 //SettingsModule.cpp 3 4 virtual void StartupModule() override 5 { 6 TSharedRef<FSettingsContainer> EditorSettingsContainer = FindOrAddContainer("Editor"); 7 EditorSettingsContainer->Describe(LOCTEXT("EditorPreferencesSubMenuLabel", "Editor Preferences"), LOCTEXT("EditorPreferencesSubMenuToolTip", "Configure the behavior and features of this Editor"), NAME_None); 8 EditorSettingsContainer->DescribeCategory("General", LOCTEXT("EditorGeneralCategoryName", "General"), LOCTEXT("EditorGeneralCategoryDescription", "General Editor settings description text here")); 9 EditorSettingsContainer->DescribeCategory("LevelEditor", LOCTEXT("EditorLevelEditorCategoryName", "Level Editor"), LOCTEXT("EditorLevelEditorCategoryDescription", "Level Editor settings description text here")); 10 EditorSettingsContainer->DescribeCategory("ContentEditors", LOCTEXT("EditorContentEditorsCategoryName", "Content Editors"), LOCTEXT("EditorContentEditorsCategoryDescription", "Content editors settings description text here")); 11 EditorSettingsContainer->DescribeCategory("Plugins", LOCTEXT("EditorPluginsCategoryName", "Plugins"), LOCTEXT("EditorPluginsCategoryDescription", "Plugins settings description text here")); 12 EditorSettingsContainer->DescribeCategory("Advanced", LOCTEXT("EditorAdvancedCategoryName", "Advanced"), LOCTEXT("EditorAdvancedCategoryDescription", "Advanced editor settings")); 13 ... ... 14 TSharedRef<FSettingsContainer> ProjectSettingsContainer = FindOrAddContainer("Project"); 15 ... ... 16 }
//上面代码加黑的就是了,其中红色的就是引擎给的容器,也就是Container:容器
Category分类、Section部件

动态绑定修改事件
1 TSharedPtr<ISettingsSection> SettingS; 2 SettingS = FModuleManager::LoadModuleChecked<ISettingsModule>("Settings").RegisterSettings("Project","Plugins", 3 TEXT("UE4EditorCustomize"), FText::FromString("UE4 EditorCustomize"), 4 FText::FromString("Setting For UE4EditorCustomize"), GetMutableDefault<UEditorCustomizeSetting>()); 5 SettingS->OnModified().BindRaw(this, &FUE4EditorCustomizeModule::OnSettingModified);
//这个例子的主要问题就是怎么获取到ISettingsSection的,在通过ISettingsSection进行绑定。