78 lines
2.7 KiB
Markdown
78 lines
2.7 KiB
Markdown
|
# PinHiddenByDefault
|
|||
|
|
|||
|
- **功能描述:** 使得这个结构里的属性在蓝图里作为引脚时默认是隐藏的。
|
|||
|
- **使用位置:** UPROPERTY
|
|||
|
- **引擎模块:** Pin
|
|||
|
- **元数据类型:** bool
|
|||
|
- **限制类型:** struct member property
|
|||
|
- **常用程度:** ★★
|
|||
|
|
|||
|
使得这个结构里的属性在蓝图里作为引脚时默认是隐藏的。
|
|||
|
|
|||
|
需要注意的是这个meta只作用于结构的成员属性,且只作用在蓝图里的节点。在有些时候一个结构里拥有多个属性,但不是希望一下子暴露所有属性来让用户编辑,有些属性可能是高级属性需要一开始隐藏起来。
|
|||
|
|
|||
|
该标记也可以在动画蓝图中,让动画节点的某些属性不暴露成引脚。
|
|||
|
|
|||
|
## 测试代码:
|
|||
|
|
|||
|
```cpp
|
|||
|
USTRUCT(BlueprintType)
|
|||
|
struct FMyPinHiddenTestStruct
|
|||
|
{
|
|||
|
GENERATED_BODY()
|
|||
|
public:
|
|||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite,Category=PinHiddenByDefaultTest)
|
|||
|
int32 MyInt_NotHidden = 123;
|
|||
|
|
|||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite,Category=PinHiddenByDefaultTest, meta = (PinHiddenByDefault))
|
|||
|
int32 MyInt_PinHiddenByDefault = 123;
|
|||
|
};
|
|||
|
|
|||
|
UFUNCTION(BlueprintCallable)
|
|||
|
static FMyPinHiddenTestStruct MyHiddenPinTestFunc(FMyPinHiddenTestStruct Input);
|
|||
|
```
|
|||
|
|
|||
|
## 测试结果:
|
|||
|
|
|||
|
可以发现MakeStruct和BreakStruct的节点,默认只有MyInt_NotHidden。当选择该蓝图节点时,可以在右侧细节面板看到MyInt_PinHiddenByDefault 的显示默认没有选中,这就是区别。
|
|||
|
|
|||
|
同样的,当该结构当作函数输入和输出参数的时候,当用SplitStuctPin展开结构节点,会发现MyInt_PinHiddenByDefault 也被隐藏了起来。
|
|||
|
|
|||
|

|
|||
|
|
|||
|
## 原理:
|
|||
|
|
|||
|
通过源码可以发现,FStructOperationOptionalPinManager 里使用了该meta,然后FMakeStructPinManager 和FBreakStructPinManager 继承了,从而使得PinHiddenByDefault的Pin一开始不显示。
|
|||
|
|
|||
|
```cpp
|
|||
|
struct FStructOperationOptionalPinManager : public FOptionalPinManager
|
|||
|
{
|
|||
|
//~ Begin FOptionalPinsUpdater Interface
|
|||
|
virtual void GetRecordDefaults(FProperty* TestProperty, FOptionalPinFromProperty& Record) const override
|
|||
|
{
|
|||
|
Record.bCanToggleVisibility = true;
|
|||
|
Record.bShowPin = true;
|
|||
|
if (TestProperty)
|
|||
|
{
|
|||
|
Record.bShowPin = !TestProperty->HasMetaData(TEXT("PinHiddenByDefault"));
|
|||
|
if (Record.bShowPin)
|
|||
|
{
|
|||
|
if (UStruct* OwnerStruct = TestProperty->GetOwnerStruct())
|
|||
|
{
|
|||
|
Record.bShowPin = !OwnerStruct->HasMetaData(TEXT("HiddenByDefault"));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
virtual void CustomizePinData(UEdGraphPin* Pin, FName SourcePropertyName, int32 ArrayIndex, FProperty* Property) const override;
|
|||
|
// End of FOptionalPinsUpdater interfac
|
|||
|
};
|
|||
|
|
|||
|
struct FMakeStructPinManager : public FStructOperationOptionalPinManager
|
|||
|
{}
|
|||
|
struct FBreakStructPinManager : public FStructOperationOptionalPinManager
|
|||
|
{}
|
|||
|
|
|||
|
```
|