2.7 KiB
2.7 KiB
NeverAsPin
- 功能描述: 在动画蓝图中使得动画节点的某个属性总是不暴露出来成为引脚
- 使用位置: UPROPERTY
- 引擎模块: Pin
- 元数据类型: bool
- 限制类型: FAnimNode_Base
- 关联项: PinShownByDefault
- 常用程度: ★★★
NeverAsPin源码中并没有用到,因为默认情况下就是不支持为引脚,所以不加也都一样。
测试代码:
USTRUCT(BlueprintInternalUseOnly)
struct INSIDEREDITOR_API FAnimNode_MyTestPinShown : public FAnimNode_Base
{
GENERATED_USTRUCT_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PinShownByDefaultTest)
int32 MyInt_NotShown = 123;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PinShownByDefaultTest, meta = (PinShownByDefault))
int32 MyInt_PinShownByDefault = 123;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PinShownByDefaultTest, meta = (AlwaysAsPin))
int32 MyInt_AlwaysAsPin = 123;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PinShownByDefaultTest, meta = (NeverAsPin))
int32 MyInt_NeverAsPin = 123;
};
测试效果:
MyInt_NeverAsPin只能和右边和默认的属性一样,不能显示为引脚。
原理:
发现bNeverShow并没有用到,因为默认情况下就是不支持为引脚。
void FAnimBlueprintNodeOptionalPinManager::GetRecordDefaults(FProperty* TestProperty, FOptionalPinFromProperty& Record) const
{
const UAnimationGraphSchema* Schema = GetDefault<UAnimationGraphSchema>();
// Determine if this is a pose or array of poses
FArrayProperty* ArrayProp = CastField<FArrayProperty>(TestProperty);
FStructProperty* StructProp = CastField<FStructProperty>(ArrayProp ? ArrayProp->Inner : TestProperty);
const bool bIsPoseInput = (StructProp && StructProp->Struct->IsChildOf(FPoseLinkBase::StaticStruct()));
//@TODO: Error if they specified two or more of these flags
const bool bAlwaysShow = TestProperty->HasMetaData(Schema->NAME_AlwaysAsPin) || bIsPoseInput;
const bool bOptional_ShowByDefault = TestProperty->HasMetaData(Schema->NAME_PinShownByDefault);
const bool bOptional_HideByDefault = TestProperty->HasMetaData(Schema->NAME_PinHiddenByDefault);
const bool bNeverShow = TestProperty->HasMetaData(Schema->NAME_NeverAsPin);
const bool bPropertyIsCustomized = TestProperty->HasMetaData(Schema->NAME_CustomizeProperty);
const bool bCanTreatPropertyAsOptional = CanTreatPropertyAsOptional(TestProperty);
Record.bCanToggleVisibility = bCanTreatPropertyAsOptional && (bOptional_ShowByDefault || bOptional_HideByDefault);
Record.bShowPin = bAlwaysShow || bOptional_ShowByDefault;
Record.bPropertyIsCustomized = bPropertyIsCustomized;
}