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

3.8 KiB
Raw Blame History

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<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 上使其具备库存能力