# WBP_InventoryView ## 基本信息 - **类型**: WidgetBlueprint (UserWidget) - **父类**: UserWidget - **源文件**: /Game/Blueprints/UI/Item/WBP_InventoryView.WBP_InventoryView - **模块**: Content/Blueprints/UI/Item ## 功能概述 WBP_InventoryView 是物品列表显示 Widget,持有 BP_InventoryComp 组件的引用,负责将库存中的物品视图列表渲染到 UI。通过 UpdateListItems 函数刷新列表显示,使用 WBP_ItemViewBox 作为单个物品视图框的子 Widget。 ## 设计用意 WBP_InventoryView 是物品系统和 UI 系统之间的桥梁。它通过 Comp 变量引用 BP_InventoryComp,从中读取 ViewCache 获取物品视图数据,然后渲染到 UI 列表。通过监听 Comp 的 OnViewChanged 委托,它能在库存变化时自动刷新显示,无需手动触发更新。这种设计将数据层(BP_InventoryComp)和显示层(WBP_InventoryView)完全解耦。 ## 职责范围 WBP_InventoryView 负责显示物品列表 UI、监听库存变化并自动刷新、以及提供物品交互的入口。物品数据管理由 BP_InventoryComp 负责,物品存储由 UDefaultContainer 负责。 ## 项目内依赖 | 依赖项 | 关系 | 源文件 | |--------|------|--------| | BP_InventoryComp | 引用 (Comp) | /Game/Blueprints/Playground/BP_InventoryComp | | FItemView | 显示数据 | Item 插件 | | WBP_ItemViewBox | 子 Widget | /Game/Blueprints/UI/Item/WBP_ItemViewBox | ## 外部视角 WBP_InventoryView 是 UserWidget 的子类,从外部调用者视角: **公开属性(蓝图可读写)** - `Comp`(BP_InventoryComp_C*)— 关联的库存组件引用 - `Bo`(bool)— 内部状态标记 **自定义函数** - `UpdateListItems()` — 从 Comp 的 ViewCache 刷新物品列表显示 **外部交互方式** - 作为 BP_Hud 的子 Widget 创建,存放于 InvView 变量 - 通过 Comp 变量引用 BP_InventoryComp,读取其 ViewCache 获取物品视图数据 - 绑定 Comp 的 OnViewChanged 委托,在库存变化时自动调用 UpdateListItems - 列表项使用 WBP_ItemViewBox 作为子 Widget 渲染单个物品 **EventGraph 事件** | 事件 | 类型 | 触发时机 | 行为 | |------|------|----------|------| | `事件预构造` | 原生覆盖 (PreConstruct) | Widget 创建时 | 预留(当前无连线逻辑) | | `事件构造` | 原生覆盖 (Construct) | Widget 创建完成后 | 预留(当前无连线逻辑) | | `事件Tick` | 原生覆盖 | 每帧 | 预留(当前无连线逻辑) | | `BindToComp` | 自定义事件 | 外部系统(如 BP_Hud/BP_Barrel)调用时 | 接收 BP_InventoryComp 引用 → 存入 Comp 变量 → 绑定 Comp 的 OnViewChanged 委托到 UpdateListItems_Event | | `UpdateListItems_Event` | 自定义事件 | Comp 的 OnViewChanged 触发时 | 调用 UpdateListItems 刷新物品列表 UI | ## 使用方法 WBP_InventoryView 在项目中的典型调用流程: - **库存 UI 绑定流程** — BP_Hud/BARREL 创建 WBP_InventoryView → 调用 BindToComp → 传入 BP_InventoryComp 引用 → 绑定 OnViewChanged → 库存变化时自动触发 UpdateListItems_Event → UpdateListItems 从 ViewCache 刷新 UI - **手动刷新流程** — 外部系统直接调用 UpdateListItems → 从 Comp.ViewCache 读取当前物品列表 → 遍历渲染 WBP_ItemViewBox 子 Widget ## 用例 | 引用方 | 路径 | 用途 | |--------|------|------| | BP_Hud | `/Game/Blueprints/BP_Hud` | 作为 InvView 子 Widget,显示物品栏 | | BP_Barrel | `/Game/Blueprints/Playground/BP_Barrel` | 通过 HUD 访问,展示木桶库存 | | BP_ItemViewDataView | `/Game/Blueprints/UI/Item/BP_ItemViewDataView` | 引用用于数据视图绑定 | | WBP_ItemViewBox | `/Game/Blueprints/UI/Item/WBP_ItemViewBox` | 作为列表项模板引用 |