1.9 KiB
Raw Blame History

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;
};

测试效果:

Untitled

原理:


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;
}