3.8 KiB
3.8 KiB
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_DefaultContainerViewCache(TArray) -- 物品视图缓存数组,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 上使其具备库存能力