1.9 KiB
1.9 KiB
BindWidgetOptional
- 功能描述: 指定在C++类中该Widget属性可以绑定到UMG的某个同名控件,也可以不绑定。
- 使用位置: UPROPERTY
- 引擎模块: Widget Property
- 元数据类型: bool
- 限制类型: UWidget子类里属性
- 关联项: BindWidget
- 常用程度: ★★★
指定在C++类中该Widget属性可以绑定到UMG的某个同名控件,也可以不绑定。
大致作用和BindWidget一样,区别是:
- BindWidgetOptional顾名思义是可选的,意思是UMG里即使不定义该控件在编译的时候也不会报错。编译会通过,但是会提示警告缺少控件。
- 和不加BindWidgetOptional的控件同名属性的区别是,前者在UMG里定义同名控件的时候不会报错,但后者是会提示同名冲突报错。
BindWidgetOptional的写法有两种: BindWidgetOptional可以看作是BindWidget和OptionalWidget的合并版。
UCLASS(BlueprintType)
class INSIDER_API UMyProperty_BindWidget :public UUserWidget
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
class UTextBlock* MyTextBlock_SameName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidgetOptional))
class UTextBlock* MyTextBlock_Optional1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget, OptionalWidget))
class UTextBlock* MyTextBlock_Optional2;
};
测试效果:
原理:
bool FWidgetBlueprintEditorUtils::IsBindWidgetProperty(const FProperty* InProperty, bool& bIsOptional)
{
if ( InProperty )
{
bool bIsBindWidget = InProperty->HasMetaData("BindWidget") || InProperty->HasMetaData("BindWidgetOptional");
bIsOptional = InProperty->HasMetaData("BindWidgetOptional") || ( InProperty->HasMetaData("OptionalWidget") || InProperty->GetBoolMetaData("OptionalWidget") );
return bIsBindWidget;
}
return false;
}