1.1 - HUD示例

本示例展示了一个简单的游戏中的HUD,并包括了以基本的暂停菜单形式出现的可点击按钮。HUD上描画了生命条的材质,并使用了蓝图接口函数来从角色读取生命值,同时在目标处会出现标记,这个标记会附带目标名称以及其与玩家的距离。HUD蓝图可以在 内容浏览器 中通过搜寻 BP_HUD_Example 来获得。

游戏模式

游戏模式 设置了默认的Pawn类,HUD类,以及PlayerController类,另外还包含了游戏内特定的行为或设置。 本例中,GameInfo_HUD 蓝图即为设置 BP_HUD_Example 蓝图为HUD类的GameMode(游戏模式)蓝图,并且我们必须在 World Settings (世界设置)选项卡中将其设置为 GameMode Override (游戏模式覆盖)。

gamemode_hud.png

HUD

ReceiveDrawHUD 事件被用来描画HUD的每个元素,它使用X值和Y值来代表屏幕尺寸。这些值可以在之后通过蓝图来体现,使得不同的HUD要素可根据游戏屏幕尺寸来进行缩放和重新定位以确保完成目标,比如说让按钮在任何屏幕分辨率下都能保持在屏幕的中心位置。

生命条

BP_HUD_healthbar.png

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

掉落拾取

BP_HUD_pickup.png

本关卡中的掉落拾取对象为 BP_Pickup_Child_Health ,它也被同时在高级蓝图 - 子蓝图 内容示例中进行使用。它在关卡蓝图中被设置为 Objective (目标)变量。

在HUD蓝图中,如果 Current Objective (当前目标)为非空:

  • 目标标记使用 Project (投影)函数来转换3D位置向量(代表目标位置)为2D屏幕坐标,这样如目标Actor出现在屏幕上,这些坐标描画的目标标记和图标将总是悬停在它的位置。

  • 通过使用 Get Text Size (获取文本尺寸)节点,文本被定位在目标的中心位置。该节点会测量在HUD上描画的字符串的高度和宽度,并考虑使用的字体和文本的尺寸。因为文本默认为左对齐,而其坐标将会位于左上方,该节点对于添加坐标轴的偏移来使文本处于中心位置将会很有帮助。

暂停菜单

BP_HUD_menu.png

在玩家按下 M 后,会打开暂停菜单。 PlayerController蓝图会随后对 Toggle Menu (打开菜单)功能执行接口信息。 此函数在 BPI_HUD_Interface_Events蓝图接口中被定义,同时还有设置目标拾取以及获取玩家角色生命值的函数。

在暂停菜单中出现的关键特性包括了:

  • 自定义函数: 名为 Draw Button 的自定义函数被用来方便地描画所有按钮的必要组件(按钮贴图,按钮文本以及点击框),同时还有单个函数节点可按需进行无限次使用。在HUD中,这就特别有用,因为需要大量算法节点来确定屏幕坐标值,偏移量等等,所以这些节点可以很容易来被包含在此函数中并被反复使用。

  • 点击框: DrawButton 函数下的 Add Hit Box (添加点击框)函数可以用来很方便地检测鼠标是否在屏幕特定区域内进行了点击或释放。我们可定义点击框的位置和尺寸,对名称也是如此。主EventGraph(事件图表)中的通用 ReceiveHitBoxClick 事件会在玩家对点击框进行点击后被触发,并输出该点击框的名称。Switch on Name 节点会随后根据此输出的名称来引导执行流程。

玩家控制器

BP_HUD_pressM.png

BP_PlayerController_HUD 蓝图是本示例的默认PlayerController(玩家控制器)类,同时在 GameInfo_HUD GameMode(游戏模式)蓝图中进行了设置。尽管我们通过 BP_HUD_Example 蓝图来设置 Press "M" for Menu (按下M键来打开菜单)字符串,但PlayerController蓝图实际上设置了按下 M 键后的初始响应。

按下 M 键后,会执行 Toggle Menu (打开菜单)接口信息,并把HUD蓝图作为目标。PlayerController随后会进行下列操作:

  • 设置 Show Mouse Cursor (显示鼠标指针)为

  • 设置 启用点击事件

  • 启用PlayerController,以赋予HUD输入值。

  • 暂停游戏。