Language:
Page Info
Engine Version:
Share

1.1 - HUD示例

本示例展示了一个简单的游戏内HUD,并且包含了形式为基本暂停菜单的可点击按钮。HUD上绘制了生命值条材质并且使用蓝图接口函数来从角色获取生命值,在目标上方绘制了目标标记以及目标的名称和距玩家的距离。 你可以通过在内容浏览器中搜索 BP_HUD_Example 来找到该HUD蓝图。

游戏模式(GameMode)

游戏模式(GameMode) 用于设置默认Pawn类、HUD类和玩家控制器类,除这些以外,还包含任何游戏特定的游戏性行为或设置。在本示例中, GameInfo_HUD 蓝图是游戏模式蓝图,该蓝图将 BP_HUD_Example 蓝图设置为HUD类,而且必须在 场景设置(World Settings) 选项卡中将它设置为 游戏模式覆盖(GameMode Override)

gamemode_hud.png

HUD

用于绘制每个HUD元素的 ReceiveDrawHUD 事件提供代表屏幕大小的X和Y数值。然后,可以在蓝图各处融入这些数值, 以使各种HUD元素能够根据游戏屏幕的大小进行缩放及调整自己的位置,例如,用于确保无论分辨率为何,按钮始终位于屏幕中央。

生命值条

BP_HUD_healthbar.png

生命值条是在HUD蓝图的构造脚本中创建的动态材质实例。该材质包含根据 “当前生命值(Current Health)”和“最大生命值(Maximum Health)”标量参数更改生命值条长度的节点,而且HUD蓝图基于角色的当前生命值更新“当前生命值(Current Health)”参数。

拾取物

BP_HUD_pickup.png

此关卡中的目标拾取物是 BP_Pickup_Child_Health,我们在高级蓝图 - 子蓝图(Advanced Blueprints - Child Blueprints) 内容示例中也用到了它。在 该关卡蓝图中,我们将它设置为“目标(Objective)”变量。

在该HUD蓝图中,如果“当前目标(Current Objective)”不是“null”:

  • 该目标标记使用 Project 函数将代表该目标的位置的3D位置矢量转换成2D屏幕坐标, 以使当目标Actor位于屏幕上时,在这些坐标上绘制的目标标签和图标始终悬停在它上方。

  • 文本通过使用 获取文本大小(Get Text Size) 节点位于目标的正上方。此节点测量在HUD上绘制字符串时字符串的高度和宽度,它考虑到了使用的字体和文本的缩放。 由于文本默认为左对齐且其坐标位于左上角,要向这些坐标添加偏移来使文本位于中央时,此节点非常有用。

暂停菜单

BP_HUD_menu.png

玩家按 M 键时将打开暂停菜单。然后玩家控制器蓝图将为 Toggle Menu 函数执行接口信息。此函数 在 BPI_HUD_Interface_Events 蓝图接口中定义,同样在该蓝图接口中定义的还有设置目标拾取物和获取玩家角色生命值的函数。

在暂停菜单中显示的关键特性包括:

  • 自定义函数:名称为 Draw Button 的自定义函数是绘制按钮的所有必要组件(按钮纹理、按钮文本和命中框)的简便方法, 它包含一个单函数节点,可以根据需要复用任意次数。它对于HUD来说非常有用,因为确定 屏幕坐标数值、偏移等时需要用到大量数学节点,而该函数可以包含这些节点并轻松复用它们。

  • 命中框:DrawButton函数中的 Add Hit Box 函数可作为检测在屏幕的指定区域中发生的鼠标点击或释放的简单方法。你可以指定命中框的位置和大小, 以及名称。当玩家点击命中框时,主事件图表中的泛型 ReceiveHitBoxClick 事件将被触发,然后它将输出命中框的名称。然后,Switch on Name 节点 将根据此名称输出确定执行流的方向。

玩家控制器

BP_HUD_pressM.png

BP_PlayerController_HUD 蓝图是本示例的默认“玩家控制器类(PlayerController Class)”,在 GameInfo_HUD 游戏模式蓝图中也设置了它。尽管 按“M”键调出菜单(Press "M" for Menu) 字符串由 BP_HUD_Example 蓝图设置, PlayerController蓝图实际上设置了按下 M 键的初始响应。

M 键被按下时,将以HUD蓝图作为目标执行“Toggle Menu”接口信息。然后,玩家控制器:

  • 显示鼠标光标(Show Mouse Cursor) 设置为 true

  • 启用单击事件(Enable Click Events) 设置为 true

  • 启用玩家控制器,以为HUD提供输入。

  • 使游戏暂停。