UI Action系统

avatar`
Yuewu(罗传月武)
Updated: Jun 3, 2025

介绍

默认情况下,CommonUI的一些原生控件,如按钮等,允许你指定默认输入Action来为控件绑定输入。如果你要新增其他的输入,只能在C++层面进行拓展和绑定。

而GUIS提供UIAction系统,允许你以数据驱动,模块化的方式,动态管理控件输入绑定,并与游戏逻辑进行连接。

当你选择不同类型的Item,不同类型的UIAction会被动态注册,并显示在底部操作栏。
DestoryAction会显示弹窗。

UIAction系统由如下几个部分组件:

  1. GUIS_UIActionWidget:放置于你的任意CommonUserWidget中,用于配置。
  2. GUIS_UIActionFactory: 数据资产,配置一组潜在可用的UIAction。
  3. GUIS_UIAction: 你通过蓝图/C++继承此类以创建不同的UI操作,封装输入处理逻辑。

UIActionWidget

下图是一个ListEntryWidget,其添加了一个UIActionWidget,并为其配置了一个ActionFactory

通用UI系统.UIAction.Widget

ListEntryWidget没有视觉样式。

当该EntryWidget所呈现的数据对象(ListItemObject)被设置时,将其关联到UIActionWidget


当该EntryWidget被选中和取消选中时,则分别调用RegisterActionsUnregisterActions来动态绑定UI输入。

UIActionFactory

GUIS_UIActionFactory(UI操作工厂)是一个数据资产,你可以配置一系列潜在的UIAction列表,该数据资产可以根据用户传入的数据对象,动态选择兼容的UIAction并进行输入绑定。

通用UI系统.UIAction.Factory

这是一个针对库存道具的UIActionFactory案例,对于一个道具,一般就会有销毁,装备,卸载等操作。

默认情况下,一个UIAction可以指定它在UI上的显示名称,ID,输入绑定数据,以及是否需要确认弹窗等。你可通过自定义GUIS_UIAction子类来添加更多其他字段。

UIAction

继承GUIS_UIAction以创建新的UIAction。

通用UI系统.UIAction.Custom

覆写Is Compatible来决定传入的Data是否与该Action兼容,只有兼容的Action会被Factory选中,并注册UI输入。

同时,你也可以通过覆写CanInvoke和InvokeAction来封装该Action的实际游戏逻辑。

比如“销毁道具”这个Action,其内部逻辑如下: