vault backup: 2024-10-12 17:19:45
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# MakeStructureDefaultValue
|
||||
|
||||
- **功能描述:** 存储BP中自定义结构里的属性的默认值。
|
||||
- **使用位置:** UPROPERTY
|
||||
- **引擎模块:** Struct
|
||||
- **元数据类型:** bool
|
||||
- **限制类型:** BP里的用户自定义Struct
|
||||
- **常用程度:** ★
|
||||
|
||||
存储BP中自定义结构里的属性的默认值。
|
||||
|
||||
- 在C++中我们写的USTRUCT的结构里的属性默认值并不需要存储在元数据中,因为在创建该结构实例的时候,就自然会调用该结构的构造函数,从而正确初始化值。
|
||||
- 而在蓝图中的用户自定义结构,并没有构造函数之类的机制。因此我们需要一个专门的Tab来填写属性的默认值。这些默认值就会存储在属性的元数据中。
|
||||
-
|
||||
|
||||
## 测试代码:
|
||||
|
||||
在蓝图中定义一个结构BP_StructDefaultTest,并填上默认值。
|
||||
|
||||

|
||||
|
||||
## 测试结果:
|
||||
|
||||
用测试命令行打印出其相关的信息,可以见到MyInt和MyString的真正属性名以及MakeStructureDefaultValue 的值。
|
||||
|
||||
```cpp
|
||||
[struct BP_StructDefaultTest UserDefinedStruct->ScriptStruct->Struct->Field->Object /Game/Struct/BP_StructDefaultTest.BP_StructDefaultTest]
|
||||
(BlueprintType = true, Tooltip = )
|
||||
ObjectFlags: RF_Public | RF_Standalone | RF_Transactional | RF_WasLoaded | RF_LoadCompleted
|
||||
Outer: Package /Game/Struct/BP_StructDefaultTest
|
||||
StructFlags: STRUCT_NoFlags
|
||||
Size: 24
|
||||
{
|
||||
(DisplayName = MyInt, Tooltip = , MakeStructureDefaultValue = 789)
|
||||
0-[4] int32 MyInt_3_CC664A574A072369083883B38EA2F129;
|
||||
PropertyFlags: CPF_Edit | CPF_BlueprintVisible | CPF_ZeroConstructor | CPF_IsPlainOldData | CPF_NoDestructor | CPF_HasGetValueTypeHash
|
||||
ObjectFlags: RF_Public | RF_LoadCompleted
|
||||
Outer: UserDefinedStruct /Game/Struct/BP_StructDefaultTest.BP_StructDefaultTest
|
||||
Path: IntProperty /Game/Struct/BP_StructDefaultTest.BP_StructDefaultTest:MyInt_3_CC664A574A072369083883B38EA2F129
|
||||
(DisplayName = MyString, Tooltip = , MakeStructureDefaultValue = Hello)
|
||||
8-[16] FString MyString_6_D8FAF5D6454C781C2D5175ACF266C394;
|
||||
PropertyFlags: CPF_Edit | CPF_BlueprintVisible | CPF_ZeroConstructor | CPF_HasGetValueTypeHash
|
||||
ObjectFlags: RF_Public | RF_LoadCompleted
|
||||
Outer: UserDefinedStruct /Game/Struct/BP_StructDefaultTest.BP_StructDefaultTest
|
||||
Path: StrProperty /Game/Struct/BP_StructDefaultTest.BP_StructDefaultTest:MyString_6_D8FAF5D6454C781C2D5175ACF266C394
|
||||
};
|
||||
```
|
||||
|
||||
## 原理:
|
||||
|
||||
在BP中结构创建变量保存的时候,如果发现默认值不为空,则设置到MakeStructureDefaultValue中去。之后再MakeStruct的时候就可以用上了。
|
||||
|
||||
```cpp
|
||||
void UK2Node_MakeStruct::FMakeStructPinManager::CustomizePinData(UEdGraphPin* Pin, FName SourcePropertyName, int32 ArrayIndex, FProperty* Property) const
|
||||
{
|
||||
const FString& MetadataDefaultValue = Property->GetMetaData(TEXT("MakeStructureDefaultValue"));
|
||||
if (!MetadataDefaultValue.IsEmpty())
|
||||
{
|
||||
Schema->SetPinAutogeneratedDefaultValue(Pin, MetadataDefaultValue);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void FUserDefinedStructureCompilerInner::CreateVariables(UUserDefinedStruct* Struct, const class UEdGraphSchema_K2* Schema, FCompilerResultsLog& MessageLog)
|
||||
{
|
||||
if (!VarDesc.DefaultValue.IsEmpty())
|
||||
{
|
||||
VarProperty->SetMetaData(TEXT("MakeStructureDefaultValue"), *VarDesc.DefaultValue);
|
||||
}
|
||||
}
|
||||
```
|
Binary file not shown.
After Width: | Height: | Size: 187 KiB |
Reference in New Issue
Block a user