命令绑定¶
Markup UI 原生支持命令绑定,将页面事件关联到数据上下文中的命令,在点击按钮或提交输入时执行应用逻辑,具体用法见事件与命令。
调用线程
所有命令回调都在游戏线程执行。
UFUNCTION¶
对于 Unreal Engine,还支持通过数据对象上公开的实例 UFUNCTION 和蓝图函数提供命令,供页面事件调用以执行游戏逻辑。
命令函数需满足以下约束:
- 函数类型:公开的实例
UFUNCTION,不能是静态函数、委托或网络函数。 - 返回值:无返回值,C++ 使用
void,蓝图不添加返回值。 - 参数类型:支持标量数值、布尔值、枚举、
FString、FName、FText、颜色、向量及UObject对象引用。 - 参数限制:不支持普通结构体、集合或可写输出参数;传入参数的数量、顺序和类型必须与函数声明一致。
绑定¶
先将数据对象设置为 MarkupUI Widget 的数据上下文,具体操作见属性绑定。例如,数据对象提供一个无参数、无返回值的 Save 函数,HTML 中按函数名绑定:
<button @onclick="{Save}">保存</button>
使用 {Save},不要写 {Save()}。命令名称使用实际函数名。
在数据对象的类中声明公开的实例函数,并在实现中执行保存逻辑:
public:
UFUNCTION(BlueprintCallable, Category = "Player")
void Save();
函数需要声明为 UFUNCTION;仅有普通 C++ 成员函数无法通过反射绑定。
- 在作为数据上下文的蓝图对象中创建函数
Save。 - 将函数的访问权限设为 Public,不添加输入参数或返回值。
- 在函数中编写保存逻辑。
- 在 HTML 中使用
@onclick="{Save}"绑定该函数。 下图左侧是 Functions 列表中的Save函数,右侧是函数图中的Save入口节点。从入口节点的执行引脚连接保存逻辑。

命令参数¶
通过 parameter 传入属性值。例如,将数据上下文中的 TargetHealth 传给 ApplyHealth:
<button @onclick="{ApplyHealth, parameter={TargetHealth}}">应用生命值</button>
对应的 C++ 声明:
UPROPERTY(BlueprintReadWrite, Category = "Player")
int32 TargetHealth = 100;
UFUNCTION(BlueprintCallable, Category = "Player")
void ApplyHealth(int32 Value);
蓝图中创建同名函数,并添加一个整数输入参数即可。参数的数量、顺序和类型必须与函数声明一致;多个参数使用 parameter={FirstValue, SecondValue}。
命令修改绑定属性后,仍需发送属性更改通知;修改集合时使用相应集合通知,详见属性绑定。
执行条件¶
可以通过条件函数或布尔属性控制命令是否执行。页面事件执行命令前,先查询条件函数;没有对应函数时,再读取同名布尔属性。
命名规则¶
条件成员名为 Can 加上命令函数名,定义在同一个数据对象上,无需在 HTML 中额外声明:
Save对应CanSave。ApplyHealth对应CanApplyHealth。{Settings.Save}检查的是Settings对象上的CanSave。
条件函数¶
- 必须是实例
UFUNCTION,不能是静态函数或网络函数。 - 不接收任何输入或输出参数,即使命令本身带参数,条件函数也不接收这些参数。
- 必须返回
bool;C++ 的const修饰可选。
例如,Save 与其条件函数声明为:
public:
UFUNCTION(BlueprintCallable, Category = "Player")
void Save();
UFUNCTION(BlueprintCallable, Category = "Player")
bool CanSave() const;
蓝图中创建函数 CanSave,不添加输入参数,只添加一个 Boolean 类型的返回值。
布尔属性¶
条件只需要读取一个布尔值时,可以直接提供 bool 类型的 UPROPERTY,无需额外编写条件函数:
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Player")
bool CanSave = true;
UFUNCTION(BlueprintCallable, Category = "Player")
void Save();
蓝图中也可以创建名为 CanSave 的 Boolean 变量。执行 Save 前读取该属性的当前值。
查找顺序¶
- 查找同一数据对象上的条件函数,例如
CanSave。 - 没有条件函数时,查找同名的布尔属性。
- 函数和属性都没有时,默认允许执行。
找到条件函数但签名不符合要求,或找到属性但类型不是 bool 时,记录错误并拒绝执行,不继续使用其他条件。
检查结果¶
- 条件函数返回或布尔属性值为
true:执行命令。 - 条件函数返回或布尔属性值为
false:跳过本次命令。
条件检查不会自动改变按钮的禁用外观;需要时另行绑定按钮状态。
子对象上的命令可以使用 {Settings.Save};输入与其他事件的通用写法见事件与命令。