Files
meishibiezb a8bdf281ff update
2026-06-05 03:01:15 +08:00

4.4 KiB
Raw Permalink Blame History

BP_Hud

基本信息

  • 类型: Blueprint (HUD)
  • 父类: HUD
  • 源文件: /Game/Blueprints/BP_Hud.BP_Hud
  • 模块: Content/Blueprints

功能概述

游戏主 HUD管理三个 UI 窗口的引用物品栏视图InvView → WBP_InventoryView、库存窗口InventoryWindow → WBP_Window、提示窗口HintWindow → WBP_Window并在 EventGraph 中引用 BP_UniversalEndpointComp 处理端点通信。作为 UI 系统的根容器,负责 Widget 的创建和生命周期管理。

设计用意

选择继承 Engine.HUD 而非在 PlayerController 或 Pawn 中管理 UI是因为 HUD 是 UE 原生提供的 UI 渲染层入口拥有独立的绘制生命周期DrawHUD且不干扰游戏逻辑层的更新频率。将三个核心窗口的引用集中到 HUD 后,其他系统只需要通过 PlayerController→GetHUD() 即可访问所有 UI 组件,避免了全局单例或漫长的引用传递链。

职责范围

  • 在游戏初始化时创建 InvView、InventoryWindow、HintWindow 三个 Widget
  • 持有这三个 Widget 的引用,作为其他系统获取 UI 实例的入口
  • 不介入各 Widget 内部的具体交互逻辑(物品渲染、窗口拖拽、提示内容由各自 Widget 负责)
  • 不处理输入事件分发。

项目内依赖

依赖项 关系 源文件
WBP_InventoryView 包含(变量InvView) /Game/Blueprints/UI/Item/WBP_InventoryView
WBP_Window 包含(变量InventoryWindow, HintWindow) /Game/Blueprints/UI/WBP_Window
WBP_Hint 引用(EventGraph) /Game/Blueprints/UI/WBP_Hint
BP_UniversalEndpointComp 引用(EventGraph) /Game/Blueprints/Component/BP_UniversalEndpointComp

外部视角

BP_Hud 是纯蓝图 HUD无 C++ 子类),从外部调用者视角:

公开 Widget 变量(蓝图可读写)

  • InvViewWBP_InventoryView_C*)— 物品栏视图 Widget 引用
  • InventoryWindowWBP_Window_C*)— 库存窗口 Widget 引用
  • HintWindowWBP_Window_C*)— 提示窗口 Widget 引用

上述三个变量均标记为 InstanceEditable其他蓝图可通过 GetPlayerController→GetHUD→Cast To BP_Hud_C 访问。HUD 本身无自定义 BlueprintCallable 函数,所有交互通过操作这三个 Widget 引用间接完成。

EventGraph 事件

事件 类型 触发时机 行为
事件开始运行 原生覆盖 (BeginPlay) HUD 创建时由引擎自动触发 创建 InventoryWindow、InvView、HintWindow 三个 Widget添加到视口绑定 BP_UniversalEndpointComp 的 Command Received 委托到 DealWithCommand
DealWithCommand 自定义事件 收到 BP_UniversalEndpointComp 的指令数据包时 解析 CommandPacket → 提取 DiscreteMeta 中的 GameplayTag → 若匹配 "Gameplay.Action.UI.Hint" 则切换 HintWindow 显示/隐藏,否则切换 InventoryWindow 显示/隐藏

外部交互方式

  • 游戏模式在启动时自动创建 BP_Hud并初始化三个子 Widget
  • 外部系统获取 BP_Hud 实例后,通过读取其 Widget 变量访问 UI 组件
  • 指令路由系统通过 BP_UniversalEndpointComp 间接向 BP_Hud 发送 UI 控制指令

使用方法

BP_Hud 是纯蓝图 HUD在项目中通过以下调用链工作

  • 游戏初始化流程 — 引擎启动游戏 → BP_TestMode 将 BP_Hud 设为 HUDClass → 生成 BP_Hud 实例 → 触发事件开始运行 → 创建 InvView/InventoryWindow/HintWindow 三个 Widget 并添加到视口
  • 指令驱动的 UI 切换流程 — 外部系统(如 BP_ControllerComp发送 CommandPacket → BP_UniversalEndpointComp 接收并派发 → BP_Hud 的 DealWithCommand 处理 → 解析 GameplayTag → 切换 HintWindow 或 InventoryWindow 的可见性
  • 外部访问 UI 组件流程 — 任何蓝图(如 BP_Barrel、BP_InventoryComp→ GetPlayerController → GetHUD → Cast To BP_Hud_C → 直接读写 InvView/InventoryWindow/HintWindow 变量

用例

引用方 路径 用途
BP_TestMode /Game/Blueprints/BP_TestMode 将 BP_Hud 设为 HUDClass作为游戏全局 UI 根容器
BP_TestCtl /Game/Blueprints/BP_TestCtl 通过 GetHUD 获取 BP_Hud访问子 Widget
BP_Barrel /Game/Blueprints/Playground/BP_Barrel 通过 BP_Hud 获取 InventoryWindow 和 InvView实现木桶 UI
BP_InventoryComp /Game/Blueprints/Playground/BP_InventoryComp 引用 BP_Hud 用于库存 UI 联动