89 lines
2.7 KiB
Markdown
89 lines
2.7 KiB
Markdown
|
# DefaultConfig
|
|||
|
|
|||
|
- **功能描述:** 指定保存到的配置文件层级是Project/Config/DefaultXXX.ini。
|
|||
|
- **引擎模块:** Config
|
|||
|
- **元数据类型:** bool
|
|||
|
- **作用机制:** 在ClassFlags中增加[CLASS_DefaultConfig](../../../../Flags/EClassFlags/CLASS_DefaultConfig.md)
|
|||
|
- **关联项:** [Config](../Config.md)
|
|||
|
- **常用程度:★★★**
|
|||
|
|
|||
|
指定保存到的配置文件层级是Project/Config/DefaultXXX.ini。
|
|||
|
|
|||
|
- 而不是默认的Saved/XXX.ini
|
|||
|
- 一般用在编辑器里把Settings自动保存到Project/Config/DefaultXXX.ini里去
|
|||
|
|
|||
|
## 示例代码:
|
|||
|
|
|||
|
```cpp
|
|||
|
UCLASS(Config = MyGame,DefaultConfig)
|
|||
|
class INSIDER_API UMyClass_DefaultConfig :public UDeveloperSettings
|
|||
|
{
|
|||
|
GENERATED_BODY()
|
|||
|
public:
|
|||
|
/** Gets the settings container name for the settings, either Project or Editor */
|
|||
|
virtual FName GetContainerName() const override { return TEXT("Project"); }
|
|||
|
/** Gets the category for the settings, some high level grouping like, Editor, Engine, Game...etc. */
|
|||
|
virtual FName GetCategoryName() const override { return TEXT("MyGame"); }
|
|||
|
/** The unique name for your section of settings, uses the class's FName. */
|
|||
|
virtual FName GetSectionName() const override { return TEXT("MyGame"); }
|
|||
|
public:
|
|||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Config)
|
|||
|
int32 MyPropertyWithConfig = 123;
|
|||
|
};
|
|||
|
|
|||
|
//保存的结果:
|
|||
|
//Config/DefaultMyGame.ini
|
|||
|
[/Script/Insider.MyClass_DefaultConfig]
|
|||
|
MyPropertyWithConfig=888
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
## 示例结果:
|
|||
|
|
|||
|

|
|||
|
|
|||
|
## 原理:
|
|||
|
|
|||
|
代码里要使用Settings->TryUpdateDefaultConfigFile();,但发现TryUpdateDefaultConfigFile不管有没有DefaultConfig都可以调用,都可以保存到Default里。因此应该调用哪个SaveConfig(TryUpdateDefaultConfigFile,UpdateGlobalUserConfigFile,UpdateProjectUserConfigFile)是可以手动指定的。
|
|||
|
|
|||
|
但是在编辑器里编辑的时候,则可以通过写好的代码来处理好逻辑。如SSettingsEditor.cpp里NotifyPostChange中调用Section->Save();则可以在内部再调用如下代码:
|
|||
|
|
|||
|
```cpp
|
|||
|
bool FSettingsSection::Save()
|
|||
|
{
|
|||
|
if (ModifiedDelegate.IsBound() && !ModifiedDelegate.Execute())
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
if (SaveDelegate.IsBound())
|
|||
|
{
|
|||
|
return SaveDelegate.Execute();
|
|||
|
}
|
|||
|
|
|||
|
//更新到正确的文件里
|
|||
|
if (SettingsObject.IsValid())
|
|||
|
{
|
|||
|
if (SettingsObject->GetClass()->HasAnyClassFlags(CLASS_DefaultConfig))
|
|||
|
{
|
|||
|
SettingsObject->TryUpdateDefaultConfigFile();
|
|||
|
}
|
|||
|
else if (SettingsObject->GetClass()->HasAnyClassFlags(CLASS_GlobalUserConfig))
|
|||
|
{
|
|||
|
SettingsObject->UpdateGlobalUserConfigFile();
|
|||
|
}
|
|||
|
else if (SettingsObject->GetClass()->HasAnyClassFlags(CLASS_ProjectUserConfig))
|
|||
|
{
|
|||
|
SettingsObject->UpdateProjectUserConfigFile();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
SettingsObject->SaveConfig();
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
```
|