Files
loneseDocument/Content/Blueprints/BP_InventoryComp.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

55 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BP_InventoryComp
## 基本信息
- **类型**: Blueprint (ActorComponent)
- **父类**: ActorComponent
- **源文件**: /Game/Blueprints/Playground/BP_InventoryComp.BP_InventoryComp
- **模块**: Content
## 功能概述
BP_InventoryComp 是库存管理组件,包装了一个 UDefaultContainer 实例,持有物品视图缓存和视图变化委托,提供物品创建和视图更新功能。它是物品系统与 Actor 之间的桥梁组件,也是 IInventory 接口的蓝图实现者。
## 设计用意
BP_InventoryComp 将库存功能封装为可复用的 ActorComponent使任何 Actor 都可以通过添加此组件来获得库存能力。它通过 DefaultContainer 引用底层存储,通过 ViewCache 缓存物品视图避免重复生成,通过 OnViewChanged 委托通知 UI 更新。这种设计将库存管理从具体的 Actor 类型中解耦出来,提高了可复用性。
## 职责范围
BP_InventoryComp 负责持有并管理 UDefaultContainer 实例、维护 FItemView 缓存、处理物品创建和视图更新、以及实现 IInventory 接口的蓝图逻辑。底层物品存储机制由 UDefaultContainer 处理,物品类型定义由 DataTable 负责。
## 项目内依赖
| 依赖项 | 关系 | 源文件 |
|--------|------|--------|
| UDefaultContainer | 持有 (DefaultContainer) | Item 插件 |
| BP_DefaultContainer | 默认实例 | /Game/Blueprints/Playground/BP_DefaultContainer |
| FItemView | 缓存 (ViewCache) | Item 插件 |
| IInventory | 实现 | Item 插件 |
## 对外接口
- **蓝图函数**
- `UpdateViewCache()` -- 刷新 ViewCache从 DefaultContainer 重新获取物品视图列表,同步缓存与底层容器状态
- `CreateItemInternal(FName ItemType, int32 Count) -> bool` -- 内部物品创建函数,通过 DefaultContainer.CreateItem 创建物品后更新 ViewCache
- **蓝图变量**(均为 is_instance_editable
- `DefaultContainer` (DefaultContainer*/UDefaultContainer*) -- 底层物品容器引用,默认指向 BP_DefaultContainer
- `ViewCache` (TArray<FItemView>) -- 物品视图缓存数组UI 从此读取显示数据,结构与 FItemView 一致ItemID, ItemType, ItemName, ItemDescription, Icon, ItemDataText
- `OnViewChanged` (动态多播委托) -- 视图变化通知委托,每次 ViewCache 更新时广播,供 UI 绑定自动刷新
- **IInventory 接口实现**BlueprintNativeEvent
- `GetItemViews() -> TArray<FItemView>` -- 返回所有物品视图
- `GetItemViewByID(const FGuid& ItemID) -> FItemView` -- 按 ID 获取视图
- `GetItemCount() -> int32` -- 物品数量
- `RequestMoveItem(const FGuid& ItemID, const TScriptInterface<IInventory>& TargetInventory)` -- 请求移动物品到目标库存
- `ReceiveItem(const FGuid& ItemID, const TScriptInterface<IItemContainer>& SourceContainer)` (BlueprintAuthorityOnly) -- 从源容器接收物品
- **EventGraph**:含 7 个事件和 30 个节点,处理库存初始化和生命周期
## 使用方法
- 作为 ActorComponent 添加到需要库存功能的 Actor 上
- 设置 `DefaultContainer` 变量指向 BP_DefaultContainer 资产(或其他 IItemContainer 实现)
- UI (如 WBP_InventoryView) 绑定 `OnViewChanged` 委托,在库存变化时自动刷新
- 调用 `CreateItemInternal(ItemType, Count)` 创建新物品,之后 ViewCache 自动更新
- 通过 IInventory 接口与其他库存组件交互:`RequestMoveItem` 将物品移出,`ReceiveItem` 从其他容器接收物品
- `UpdateViewCache` 在物品变化后同步缓存与底层容器的状态
- 继承类 BP_DropItemInvComp 通过覆盖 BeginPlay 自动调用 CreateItemInternal
## 用例
- BP_DropItemInvComp 的父类,提供库存管理的通用基础
- WBP_InventoryView 通过 `Comp` 变量引用此组件,读取 ViewCache 渲染物品列表
- 添加到任何 Actor 上使其具备库存能力