66 lines
4.0 KiB
Markdown
66 lines
4.0 KiB
Markdown
# BP_Bomb
|
||
|
||
## 基本信息
|
||
- **类型**: Blueprint (Actor)
|
||
- **父类**: Actor
|
||
- **源文件**: /Game/Blueprints/Playground/BP_Bomb.BP_Bomb
|
||
- **模块**: Content/Blueprints/Playground
|
||
|
||
## 功能概述
|
||
BP_Bomb 是物品系统和追踪器系统的交互核心示例 Actor。它结合了 IItemContainer(物品容器接口)、UItemTracer(物品追踪器)和 Owner 检测,演示了物品在 Actor 之间的完整生命周期:创建、追踪、转移和响应。
|
||
|
||
## 设计用意
|
||
BP_Bomb 是最复杂的蓝图示例,演示了物品系统的全部核心功能。它通过 ItemContainer 持有炸弹物品的容器,通过 ItemLocation(UItemTracer)追踪炸弹物品的位置变化,通过 Item ID(GUID)实现跨容器追踪。追踪器绑定 OnItemMoved 委托,当检测到炸弹转移到其他容器时触发相应的业务逻辑(如爆炸)。GetContainer() 和 FindActorInOuterChain 函数则演示了 C++/蓝图桥接模式——在蓝图层面实现等同于 C++ UItemTracer 的查找逻辑。
|
||
|
||
## 职责范围
|
||
BP_Bomb 负责演示物品+追踪器的完整交互流程,包括物品创建、容器查找、追踪器委托绑定、以及物品转移响应。底层容器存储实现由 UDefaultContainer 处理,BP_Bomb 专注于物品生命周期管理的示例代码。
|
||
|
||
## 项目内依赖
|
||
| 依赖项 | 关系 | 源文件 |
|
||
|--------|------|--------|
|
||
| IItemContainer | 持有 (ItemContainer) | Item 插件 |
|
||
| UItemTracer | 持有 (ItemLocation) | Item 插件 |
|
||
|
||
## 外部视角
|
||
|
||
BP_Bomb 是 Actor 的子类,从外部调用者视角:
|
||
|
||
**公开属性(蓝图可读写)**
|
||
- `ItemContainer`(IItemContainer 接口引用)— 持有的物品容器
|
||
- `Current Owner`(Object*)— 当前拥有者
|
||
- `ItemLocation`(UItemTracer*)— 物品位置追踪器
|
||
- `Item ID`(Guid)— 追踪的物品 GUID
|
||
|
||
**自定义函数**
|
||
- `GetContainer()` → `IItemContainer` — 获取当前持有的容器接口
|
||
- `FindActorInOuterChain(Object*)` → `Actor*` — 沿 Outer 链向上查找 Actor
|
||
|
||
**外部交互方式**
|
||
- 放置在 Playground 关卡中作为可交互对象
|
||
- 演示物品系统核心流程:创建 → 追踪 → 转移 → 响应
|
||
- 通过 ItemLocation(UItemTracer)绑定 OnItemMoved 委托,检测物品跨容器转移
|
||
|
||
**EventGraph 事件**
|
||
|
||
| 事件 | 类型 | 触发时机 | 行为 |
|
||
|------|------|----------|------|
|
||
| `事件开始运行` | 原生覆盖 (BeginPlay) | Actor 生成时由引擎自动触发 | 通过 GetContainer 获取容器 → CreateItem 创建炸弹物品 → GetItemProperty 获取 ItemTracer → 存入 ItemLocation → 存入 ItemID |
|
||
| `事件Actor开始重叠` | 原生覆盖 (OnActorBeginOverlap) | 其他 Actor 进入重叠区域 | 预留(当前无连线逻辑) |
|
||
| `事件Tick` | 原生覆盖 | 每帧 | Switch Has Authority → 服务器端逻辑处理 |
|
||
| `On Component Hit (Sphere)` | 组件绑定事件 | 球形碰撞体被击中时 | Switch Has Authority → 验证 ItemLocation 有效 → 按类获取 BP_InventoryComp → RequestMoveItem 请求物品移动 |
|
||
| `事件RequestMoveItem` | 接口事件 (来自 Inventory 系统) | Inventory 系统请求移动物品时 | 通过 GetContainer 获取容器 → ReceiveItem 接收物品 |
|
||
|
||
## 使用方法
|
||
|
||
BP_Bomb 在项目中的典型调用流程:
|
||
|
||
- **炸弹初始化流程** — BeginPlay → GetContainer → CreateItem(TestBomb)→ GetItemProperty(获取 ItemTracer)→ 存入 ItemLocation 和 ItemID → 追踪器绑定委托
|
||
- **物品移动触发流程** — 玩家拾取炸弹 → 炸弹被移出容器 → On Component Hit → 验证 ItemLocation → 获取目标 BP_InventoryComp → RequestMoveItem → 接口事件触发 → ReceiveItem 接收物品到新容器
|
||
- **追踪器响应流程** — ItemLocation(UItemTracer)检测到物品移动 → 触发 OnItemMoved 委托 → 执行爆炸/响应逻辑
|
||
|
||
## 用例
|
||
|
||
| 引用方 | 路径 | 用途 |
|
||
|--------|------|------|
|
||
| Playground | `/Game/地图关卡/Playground` | 关卡中放置的交互示例,演示物品系统全流程 |
|