This commit is contained in:
meishibiezb
2026-06-04 21:37:53 +08:00
parent b0d2a0e2e7
commit 29a3f77908
63 changed files with 4068 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
# 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 上使其具备库存能力