Files
loneseDocument/Content/Blueprints/BP_InventoryComp.md
meishibiezb a8bdf281ff update
2026-06-05 03:01:15 +08:00

78 lines
5.3 KiB
Markdown
Raw Permalink 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/Blueprints/Playground
## 功能概述
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 插件 |
## 外部视角
BP_InventoryComp 是 ActorComponent 的子类(无 C++ 父类),从外部调用者视角:
**公开属性(蓝图可读写)**
- `DefaultContainer`UDefaultContainer*)— 关联的物品容器实例
- `ViewCache`TArray<FItemView>)— 物品视图缓存
**公开委托**
- `OnViewChanged`(多播委托)— 视图变化时广播,外部可绑定。触发时机:物品创建、移动、移除等导致 ViewCache 变更时
**自定义函数**
- `UpdateViewCache()` — 从 DefaultContainer 刷新 ViewCache 并触发 OnViewChanged
- `CreateItemInternal(FName ItemType, int32 Count)``bool` — 创建指定类型和数量的物品并放入容器
**外部交互方式**
- 作为组件添加到 Actor如 BP_Barrel、BP_NewChar
- UI 层WBP_InventoryView通过 Comp 变量引用,读取 ViewCache 渲染列表,绑定 OnViewChanged 监听变化
- 其他系统通过组件引用的方式获取 BP_InventoryComp 并进行物品操作
**EventGraph 事件**
| 事件 | 类型 | 触发时机 | 行为 |
|------|------|----------|------|
| `事件开始运行` | 原生覆盖 (BeginPlay) | 组件创建时由引擎自动触发 | 创建 BP_DefaultContainer → 判断网络权限:服务器端执行 GetOwner → Cast 到 Pawn → Controller → PlayerController → HUD → BP_Hud → InvView → BindToComp |
| `CreateItemRPCReplicated` | 自定义事件 (RPC, Server) | 客户端请求创建物品时 | 接收 ItemType 和 Count → 通过 IItemContainer 接口创建物品 |
| `MoveItemRPCReplicated` | 自定义事件 (RPC, Server) | 客户端请求移动物品时 | 接收 TargetInventory 和 ItemID → 通过 IInventory 接口移动物品到目标容器 |
| `UpdateViewCacheRPCReplicated` | 自定义事件 (RPC, Server) | 客户端请求刷新视图时 | 从 DefaultContainer 获取 ItemViews → 更新 ViewCache |
| `SyncViewCacheRPCReplicated` | 自定义事件 (RPC, All) | 服务器同步视图到所有客户端时 | 接收服务器端 ViewCache → 更新本地 ViewCache → 调用 OnViewChanged 委托通知 UI |
| `Client RPC` | 自定义事件 (RPC, Client) | 服务器通知客户端刷新 UI 时 | 获取 Owner → Cast 到 Pawn → Controller → PlayerController → HUD → BP_Hud → InvView → BindToComp |
## 使用方法
BP_InventoryComp 在项目中的典型调用流程:
- **库存初始化流程** — Actor如 BP_Barrel的 BP_InventoryComp 组件创建 → BeginPlay → 创建 BP_DefaultContainer → 服务端连接 HUD 的 InvView 绑定 UI
- **物品创建流程** — 客户端请求创建物品 → CreateItemRPCReplicatedRPC 到服务器)→ 通过 IItemContainer.CreateItem 创建 → 服务器触发 SyncViewCacheRPC → 更新所有客户端 ViewCache → OnViewChanged 通知 UI
- **UI 绑定流程** — WBP_InventoryView.BindToComp → 设置 Comp 变量引用 → 绑定 OnViewChanged 委托 → 库存变化时自动调用 UpdateListItems
## 用例
BP_InventoryComp 被 11 个文件引用(项目内最广泛的组件之一),按用途分类:
| 引用方 | 路径 | 用途 |
|--------|------|------|
| WBP_InventoryView | `/Game/Blueprints/UI/Item/WBP_InventoryView` | 读取 ViewCache 渲染 UI绑定 OnViewChanged 自动刷新 |
| BP_DropItemInvComp | `/Game/Blueprints/Playground/BP_DropItemInvComp` | 继承为掉落物组件,增加 Item 变量 |
| BP_Barrel | `/Game/Blueprints/Playground/BP_Barrel` | 组件实例,管理木桶内物品 |
| BP_InventoryDrop | `/Game/Blueprints/Playground/BP_InventoryDrop` | 组件实例,管理掉落物品 |
| BP_ItemTrap | `/Game/Blueprints/Playground/BP_ItemTrap` | 组件实例,管理陷阱物品 |
| BP_TestItem | `/Game/Blueprints/Playground/BP_TestItem` | 组件实例,测试物品管理 |
| BP_Bomb | `/Game/Blueprints/Playground/BP_Bomb` | 组件实例,管理炸弹物品 |