# 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) -- 物品视图缓存数组,UI 从此读取显示数据,结构与 FItemView 一致(ItemID, ItemType, ItemName, ItemDescription, Icon, ItemDataText) - `OnViewChanged` (动态多播委托) -- 视图变化通知委托,每次 ViewCache 更新时广播,供 UI 绑定自动刷新 - **IInventory 接口实现**(BlueprintNativeEvent): - `GetItemViews() -> TArray` -- 返回所有物品视图 - `GetItemViewByID(const FGuid& ItemID) -> FItemView` -- 按 ID 获取视图 - `GetItemCount() -> int32` -- 物品数量 - `RequestMoveItem(const FGuid& ItemID, const TScriptInterface& TargetInventory)` -- 请求移动物品到目标库存 - `ReceiveItem(const FGuid& ItemID, const TScriptInterface& 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 上使其具备库存能力