67 lines
3.2 KiB
Markdown
67 lines
3.2 KiB
Markdown
# WBP_Window
|
||
|
||
## 基本信息
|
||
- **类型**: WidgetBlueprint (UserWidget)
|
||
- **父类**: UserWidget
|
||
- **源文件**: /Game/Blueprints/UI/WBP_Window.WBP_Window
|
||
- **模块**: Content/Blueprints/UI
|
||
|
||
## 功能概述
|
||
可拖拽窗口 Widget,实现了一个具有标题栏的基本窗口 UI。支持鼠标拖拽移动(通过 On_Title_Bar_MouseButtonDown/Up 和 UpdatePosition 函数),持有 IsDragging(bool)、DragStartPoint(Vector2D)、WidgetStartPoint(Vector2D)、IsTemp(bool)四个变量管理拖拽状态。
|
||
|
||
## 设计用意
|
||
提供一个可复用的通用窗口 UI 组件,支持标题栏拖拽移动。作为游戏内各类面板的基础容器,被 BP_Hud、BP_Barrel 等持有使用。
|
||
|
||
## 职责范围
|
||
- 渲染窗口标题栏和内容区域
|
||
- 管理窗口的拖拽移动逻辑
|
||
- 标识是否为临时窗口(IsTemp)
|
||
|
||
## 项目内依赖
|
||
| 依赖项 | 关系 | 源文件 |
|
||
|--------|------|--------|
|
||
| (无) | — | — |
|
||
|
||
## 外部视角
|
||
|
||
WBP_Window 是 UserWidget 的子类,从外部调用者视角:
|
||
|
||
**公开属性(蓝图可读写)**
|
||
- `IsDragging`(bool)— 当前是否在拖拽状态
|
||
- `DragStartPoint`(Vector2D)— 拖拽起始鼠标位置
|
||
- `WidgetStartPoint`(Vector2D)— 拖拽起始 Widget 位置
|
||
- `IsTemp`(bool)— 是否为临时窗口
|
||
|
||
**公开函数**
|
||
- `On_Title_Bar_MouseButtonDown(Geometry, PointerEvent)` → `FEventReply` — 标题栏按下,启动拖拽
|
||
- `On_Title_Bar_MouseButtonUp(Geometry, PointerEvent)` → `FEventReply` — 标题栏释放,结束拖拽
|
||
- `UpdatePosition()` — 根据拖拽偏移更新 Widget 位置
|
||
|
||
**外部交互方式**
|
||
- 由 BP_Hud 或 BP_Barrel 创建并持有,作为通用窗口容器
|
||
- 外部系统通过 Widget 引用设置内容或控制显示/隐藏
|
||
|
||
**EventGraph 事件**
|
||
|
||
| 事件 | 类型 | 触发时机 | 行为 |
|
||
|------|------|----------|------|
|
||
| `事件预构造` | 原生覆盖 (PreConstruct) | Widget 在编辑器中放置或运行时创建时 | 预留(当前无连线逻辑) |
|
||
| `事件构造` | 原生覆盖 (Construct) | Widget 创建完成后 | 预留(当前无连线逻辑) |
|
||
| `事件Tick` | 原生覆盖 | 每帧 | 如果 IsDragging=true → 调用 UpdatePosition 更新窗口位置 |
|
||
| `On Clicked (Button_61)` | 组件绑定事件 | 用户点击关闭按钮时 | 如果 IsTemp=true → 从父项中移除(销毁临时窗口),否则 → 设置可视性为 Hidden(隐藏持久窗口) |
|
||
|
||
## 使用方法
|
||
|
||
WBP_Window 在项目中的典型调用流程:
|
||
|
||
- **窗口拖拽流程** — 用户按住标题栏 → On_Title_Bar_MouseButtonDown 记录拖拽起始位置 → Tick 检测 IsDragging → UpdatePosition 根据鼠标偏移移动 Widget → 释放 → On_Title_Bar_MouseButtonUp 结束拖拽
|
||
- **临时窗口关闭流程** — 用户点击关闭按钮 → On Clicked (Button_61) → 判断 IsTemp → 临时窗口直接从父项移除,持久窗口仅隐藏
|
||
- **HUD 窗口创建流程** — BP_Hud.BeginPlay → 创建 WBP_Window(InventoryWindow/HintWindow)→ 添加到视口 → 外部通过 BP_Hud 变量访问
|
||
|
||
## 用例
|
||
|
||
| 引用方 | 路径 | 用途 |
|
||
|--------|------|------|
|
||
| BP_Hud | `/Game/Blueprints/BP_Hud` | 作为 InventoryWindow/HintWindow 窗口容器 |
|
||
| BP_Barrel | `/Game/Blueprints/Playground/BP_Barrel` | 作为 BarrelWindow 木桶交互窗口 |
|