This commit is contained in:
meishibiezb
2026-06-04 21:37:53 +08:00
parent b0d2a0e2e7
commit 29a3f77908
63 changed files with 4068 additions and 1 deletions

View File

@@ -0,0 +1,45 @@
# 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<FItemView>` -- 返回容器中所有物品视图列表
- `GetItemViewByID(const FGuid& ItemID) const -> FItemView` -- 按物品 ID 获取单个物品视图
- `GetItemCount() const -> int32` -- 返回当前容器中的物品数量
- `MoveItem(const FGuid& ItemID, const TScriptInterface<IItemContainer>& TargetContainer) -> bool` -- 将物品移动到目标容器BlueprintAuthorityOnly
- `CreateItem(FName ItemType, TArray<FGuid>& 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<TUniquePtr<FItemInstance>> Items` 处理
- BP_DefaultContainer 存在的意义是提供一个蓝图可引用的资产版本,方便在编辑器中直接拖拽配置
- 无需在蓝图层面编写任何逻辑functions=[]),完全依赖父类实现
## 用例
- BP_InventoryComp 的 `DefaultContainer` 变量默认值,作为库存组件的底层存储
- 任何需要 IItemContainer 接口的地方均可引用此资产