UDN
Search public documentation:

UIOverlayWidgetsCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

Unreal UI Overlay(覆盖)控件

文档概要:关于Overlay(覆盖)控件的介绍,比如工具提示和关天菜单。

文档变更记录: Preston Thorne添加了关于UI Overlay (覆盖)控件相关的信息。

Tooltips(工具提示)

现在, UIObject 有一个 ToolTip(工具提示) 数据库绑定。这个绑定控制了如果您把鼠标停在控件的上方将要出现的工具提示信息(通常会把控件和一个本地化的字符串相绑定)。默认的行为是每个页面有一个单独的工具提示控件(因为一次仅能显示一个工具提示)。当您把鼠标放到一个控件的上面时,控件将会复制绑定到页面的全局tooltip(工具提示)对象上的 ToolTip(工具提示) 数据仓库,并启动工具提示的延迟计时器。您可以通过处理 OnQueryTooltip delegate来提供一个自定义的tooltip(工具提示)对象,但是如果您这样做了,您将需要自己执行UIObject::ActivateToolTip种的所有步骤。

相关方法:

  • GameUISceneClient.CanShowToolTips -如果返回假,那么将不会显示工具提示信息。
  • UIObject::ActivateToolTip -显示控件的绑定到页面的默认工具提示上的ToolTip(工具提示)。
  • UIObject.delegateOnQueryToolTip -允许您为控件提供一个自定义的工具提示对象。
  • UIToolTip.delegateActivateToolTip() -一旦鼠标进入到控件的边界范围内,便调用这个函数。如果需要,这个函数允许您阻止工具提示信息显示。默认的行为是在一个小的延迟后为显示的工具提示信息启用一个计时器。这里,您可以动态地设置绑定到工具提示上的数据。
  • UIToolTip.delegateDeactivateToolTip() -当页面的ActiveControl(激活控件)改变时,调用这个函数。如果需要,它允许您阻止工具提示的隐藏。默认的行为是隐藏工具提示信息。

相关变量

  • GameUISceneClient.bDisableToolTips -可以全局地禁用工具提示。这个值使用 CanShowToolTips 进行检测。
  • UIInteraction.ToolTipInitialDealySeconds - 控制当鼠标进入到控件边界多少秒后开始显示工具提示信息。
  • UIInteraction.ToolTipExpirationSeconds -控制工具提示信息多少秒后自己自动消失(也就是,如果您移动到一个控件后便不再移动鼠标)。

流程

当页面的 ActiveControlSetActiveControl() 中发生改变时,将会在新的 ActiveControl 上调用 ActivateToolTipUIObject.ActivateToolTip() 首先会调用 OnQueryToolTip delegate来允许脚本覆盖默认的行为。如果 OnQueryToolTip 返回 FALSE(假) 并且控件的 ToolTip(工具提示) 绑定有效,页面的全局工具提示控件是激活状态(也就是激活了最初的延迟描述计时器),并且调用了 UIToolTip::LinkBinding 函数来连接 ActiveControl 的绑定到页面的默认工具提示控件上的 ToolTip 。每一帧,工具提示控件都会通过 UGameUISceneClient::Tick() 函数进行监测更新。一旦过了 ToolTipInitialDelaySeconds(工具提示初始延迟时间) ,工具提示进行格式、位置处理,并显示出来。页面客户端将在每帧中继续更新工具提示信息。一旦过了 ToolTipExpirationSeconds(工具提示过期秒数) ,工具提示将会隐藏它本身。

Context Menus(关联菜单)

UIObject 现在有一个关联菜单数据绑定。这个绑定定义了关联菜单从哪里出现。您也可以在一个关联菜单显示前手动地通过脚本向关联菜单中添加及删除菜单项。如果激活的控件不支持关联菜单,那么它的父项链的每个控件都有机会提供一个。

相关方法

  • UIObject::ActivateContextMenu -显示控件的绑定到页面的全局关联菜单上的 ContextMenu(关联菜单) 数据,并打开关联菜单。
  • UIObject.delegateOnOpenContextMenu -允许您为控件提供一个自定义关联菜单。这也是您可以在UnrealScript中 添加/删除 菜单项等的地方。
  • UIObject.delegateOnCloseContextMenu -当UI系统想关闭当前激活的关联菜单时调用这个函数。允许您覆盖或组织菜单关闭。
  • UIObject.delegateOnContextMenuSelected -当用户在点击或选择关联菜单中的一项时,这里是执行您选择的动作的逻辑的地方。
  • UIContextMenu::Open -执行所有需要的步骤来显示关联菜单(计算关联菜单出现的位置,显示关联菜单列表、设置菜单的聚焦等)。
  • UIContextMenu::Close -执行所有用于关闭关联菜单的步骤并使页面返回到正常模式(把聚焦恢复到先前聚焦的控件上,隐藏关联菜单等)。
  • UIContextMenu 的脚本方法 -这些方法允许您手动地从UnrealScript或C++中添加、删除及获得关联菜单项。

相关变量

  • UIObject.ContextMenu - 一个数据绑定属性,它提供了关联菜单的项。如果您想动态地从脚本中构建关联菜单项,那么您则不需要填充这些变量。

流程

UIObject::ProcessInputKey 接收到鼠标右击释放事件时,它调用 ActivateContextMenu 来获得有效地关联菜单引用。如果控件不支持关联菜单,调用函数将会向上传递到它的父项,从而允许父项控件提供一个关联菜单。=ActivateContextMenu=首先会调用 OnOpenContextMenu delegate 来让脚本提供一个关联菜单(脚本也有权使用页面的默认关联菜单,也可以手动地在脚本中向它添加菜单项,请参照 UIButton 实例)。如果返回了一个有效的关联菜单,那么 ActivateContextMenu 将会在关联菜单上调用 Open 函数。 UIContextMenu::Open 获得当前的鼠标位置并把关联菜单放到那个点上,然后将会产生列表并手动地处理列表的渲染边界,从而保证关联菜单不会在第二个渲染帧弹出到不同的位置。当用户选择一个选项时, 将会调用 OnContextMenuSelected delegate 来通知UnrealScript,然后将会调用 Close() 来隐藏关联菜单并把 聚焦/输入 控件返回到正常状态。