# BP_DefaultContainer ## 基本信息 - **类型**: Blueprint (UObject) - **父类**: UDefaultContainer - **源文件**: /Game/Blueprints/Playground/BP_DefaultContainer.BP_DefaultContainer - **模块**: Content ## 功能概述 BP_DefaultContainer 是 UDefaultContainer 的蓝图子类,作为物品系统的默认容器在蓝图层中使用。无额外自定义变量,直接使用 C++ 父类的完整 IItemContainer 实现,提供 CreateItem、GetItemViews、MoveItem 等物品操作接口。 ## 设计用意 UDefaultContainer 是 C++ 中 IItemContainer 的默认实现,但不方便在编辑器中直接引用。BP_DefaultContainer 提供了一个蓝图可引用、可放置的资产版本,使得其他蓝图(如 BP_InventoryComp)可以通过编辑器直接引用它作为物品存储容器,简化了工作流。 ## 职责范围 BP_DefaultContainer 作为物品容器的蓝图实例化版本,负责在编辑器中作为可引用的资产存在。底层的物品存储机制、IItemContainer 接口实现全部由 C++ 父类 UDefaultContainer 处理。 ## 项目内依赖 | 依赖项 | 关系 | 源文件 | |--------|------|--------| | UDefaultContainer | 父类 | Item 插件 | | IItemContainer | 间接实现 | Item 插件 | ## 对外接口 - **继承自 UDefaultContainer(即 IItemContainer 接口)的全部 BlueprintCallable 函数**: - `GetItemViews() const -> TArray` -- 返回容器中所有物品视图列表 - `GetItemViewByID(const FGuid& ItemID) const -> FItemView` -- 按物品 ID 获取单个物品视图 - `GetItemCount() const -> int32` -- 返回当前容器中的物品数量 - `MoveItem(const FGuid& ItemID, const TScriptInterface& TargetContainer) -> bool` -- 将物品移动到目标容器(BlueprintAuthorityOnly) - `CreateItem(FName ItemType, TArray& NewItemIDs, int32 Count=1) -> bool` -- 按 ItemType 创建物品(BlueprintAuthorityOnly) - `GetItemProperty(FGuid ItemID, FName PropertyName, int32& Value) -> bool` -- 读取物品动态属性(CustomThunk,属性类型自动匹配) - `SetItemProperty(FGuid ItemID, FName PropertyName, int32 Value)` -- 写入物品动态属性(CustomThunk) - **无自定义蓝图变量或函数**(MCP: variables=[], functions=[]):纯父类能力透传,所有接口由 UDefaultContainer C++ 层实现 ## 使用方法 - 作为 UObject 资产创建并保存在 /Game/Blueprints/Playground/ 路径下 - 被 BP_InventoryComp 的 `DefaultContainer` 变量引用,作为物品的实际存储容器 - 通过 IItemContainer 接口的所有 BlueprintCallable 函数进行物品操作 - 实际存储逻辑由 C++ 父类 UDefaultContainer 的 `TArray> Items` 处理 - BP_DefaultContainer 存在的意义是提供一个蓝图可引用的资产版本,方便在编辑器中直接拖拽配置 - 无需在蓝图层面编写任何逻辑(functions=[]),完全依赖父类实现 ## 用例 - BP_InventoryComp 的 `DefaultContainer` 变量默认值,作为库存组件的底层存储 - 任何需要 IItemContainer 接口的地方均可引用此资产