67 lines
3.7 KiB
Markdown
67 lines
3.7 KiB
Markdown
# 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` | 作为列表项模板引用 |
|