2.7 KiB
2.7 KiB
PinHiddenByDefault
- 功能描述: 使得这个结构里的属性在蓝图里作为引脚时默认是隐藏的。
- 使用位置: UPROPERTY
- 引擎模块: Pin
- 元数据类型: bool
- 限制类型: struct member property
- 常用程度: ★★
使得这个结构里的属性在蓝图里作为引脚时默认是隐藏的。
需要注意的是这个meta只作用于结构的成员属性,且只作用在蓝图里的节点。在有些时候一个结构里拥有多个属性,但不是希望一下子暴露所有属性来让用户编辑,有些属性可能是高级属性需要一开始隐藏起来。
该标记也可以在动画蓝图中,让动画节点的某些属性不暴露成引脚。
测试代码:
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一开始不显示。
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
{}