UPROPERTY
中的 meta = (BindWidget)
标记的作用是将 C++ 类中的变量(widget成员变量)与蓝图中的UI 元素(widget元素)进行绑定(例如 Button
、TextBlock
等)。
这个标记主要在 UUserWidget
的子类中使用,用于确保在蓝图中创建的控件能够在 C++ 中直接访问和操作,即实现二者相互绑定。
BindWidget
的作用
- 绑定蓝图中的控件到 C++ 变量:
- 当在C++自定义的
UUserWidget
的子类中,创建一个成员UButton*
,然后在编辑器派生一个蓝图UMG,在其中创建一个 UI 控件(比如Button
),并将其命名为PointSmall
(名字与子类中的变量名必须相同,否则会无法编译该UMG),在 C++ 代码中使用UPROPERTY
变量并加上meta = (BindWidget)
,UE会在运行时自动将蓝图中的Button
控件实例与 C++ 中的UButton* PointSmall
变量进行绑定。 - 当 UMG蓝图加载时,使用
BindWidget
标记的控件会自动被初始化并赋值给相应的 C++ 变量。
- 当在C++自定义的
不指定 BindWidget
的后果
- 无法自动绑定: 如果在
UPROPERTY
中不指定meta = (BindWidget)
,C++ 变量不会自动与蓝图中的控件绑定。即使控件在蓝图中存在并命名正确,C++ 变量也会保持未初始化状态(即指针为nullptr
) - 可能需要手动查找控件: 如果没有
BindWidget
,必须在代码中运行时手动查找并初始化控件(一般都是这个流程)。
这样的设计,可以实现,在蓝图中设计UI、UMG的风格,在c++里面写具体的逻辑以及跟其他C++类进行更加方便的交互,比如事件驱动,基类中写个委托,该委托可以非常方便的在其他C++类里面访问,该委托的广播可以用button的回调来做。