vault backup: 2024-10-12 17:19:45
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# PerObjectConfig
|
||||
|
||||
- **功能描述:** 在已经有config配置文件名字的情况下,指定应该按每个对象实例来存储值,而不是一个类一个存储值。
|
||||
- **引擎模块:** Config
|
||||
- **元数据类型:** bool
|
||||
- **作用机制:** 在ClassFlags中增加[CLASS_PerObjectConfig](../../../Flags/EClassFlags/CLASS_PerObjectConfig.md)
|
||||
- **关联项:** [Config](Config.md)
|
||||
- **常用程度:★★★★★**
|
||||
|
||||
在已经有config配置文件名字的情况下,指定应该按每个对象实例来存储值,而不是一个类一个存储值。
|
||||
|
||||
- 此类的配置信息将按对象存储,在.ini文件中,每个对象都有一个分段,根据对象命名,格式为[ObjectName ClassName]。
|
||||
- 此说明符会传播到子类。指定该配置是对每个对象都单独保存。
|
||||
|
||||
## 示例代码:
|
||||
|
||||
注意ObjectName必须一致
|
||||
|
||||
```cpp
|
||||
UCLASS(Config = Game,PerObjectConfig)
|
||||
class INSIDER_API UMyClass_PerObjectConfig :public UObject
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite)
|
||||
int32 MyProperty = 123;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Config)
|
||||
int32 MyPropertyWithConfig = 123;
|
||||
};
|
||||
|
||||
void UMyClass_Config_Test::TestPerObjectConfigSave()
|
||||
{
|
||||
UMyClass_PerObjectConfig* testObject1 = NewObject<UMyClass_PerObjectConfig>(GetTransientPackage(), TEXT("testObject1"));
|
||||
testObject1->MyPropertyWithConfig = 456;
|
||||
testObject1->SaveConfig();
|
||||
|
||||
UMyClass_PerObjectConfig* testObject2 = NewObject<UMyClass_PerObjectConfig>(GetTransientPackage(), TEXT("testObject2"));
|
||||
testObject2->MyPropertyWithConfig = 789;
|
||||
testObject2->SaveConfig();
|
||||
|
||||
}
|
||||
|
||||
void UMyClass_Config_Test::TestPerObjectConfigLoad()
|
||||
{
|
||||
UMyClass_PerObjectConfig* testObject1 = NewObject<UMyClass_PerObjectConfig>(GetTransientPackage(), TEXT("testObject1"));
|
||||
//testObject1->LoadConfig(); //不需要显式调用LoadConfig
|
||||
|
||||
UMyClass_PerObjectConfig* testObject2 = NewObject<UMyClass_PerObjectConfig>(GetTransientPackage(), TEXT("testObject2"));
|
||||
//testObject2->LoadConfig();
|
||||
}
|
||||
|
||||
//\Saved\Config\WindowsEditor\Game.ini
|
||||
[testObject1 MyClass_PerObjectConfig]
|
||||
MyPropertyWithConfig=456
|
||||
|
||||
[testObject2 MyClass_PerObjectConfig]
|
||||
MyPropertyWithConfig=789
|
||||
```
|
||||
|
||||
## 原理:
|
||||
|
||||
对象构造的末期会尝试去读取配置。
|
||||
|
||||
```cpp
|
||||
void FObjectInitializer::PostConstructInit()
|
||||
{
|
||||
//在NewObject构造中后面会调用
|
||||
if (bIsCDO || Class->HasAnyClassFlags(CLASS_PerObjectConfig))
|
||||
{
|
||||
Obj->LoadConfig(NULL, NULL, bIsCDO ? UE::LCPF_ReadParentSections : UE::LCPF_None);
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user