Files
loneseDocument/Content/Blueprints/WBP_TestUI.md
meishibiezb a8bdf281ff update
2026-06-05 03:01:15 +08:00

72 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WBP_TestUI
## 基本信息
- **类型**: WidgetBlueprint (UserWidget)
- **父类**: UserWidget
- **源文件**: /Game/Blueprints/UI/Dialog/WBP_TestUI.WBP_TestUI
- **模块**: Content/Blueprints/UI/Dialog
## 功能概述
WBP_TestUI 是对话演示脚本的显示/执行 Widget实现了 IPresentationScriptExecutor 接口。它接收 FDialogPresentationScriptData解析其中的 JSON 命令,构建 UI 选择按钮,驱动演示脚本的执行流。同时持有 Ultra Dynamic Sky 引用以支持环境变化命令。
## 设计用意
WBP_TestUI 是 Dialog 插件在 UI 层的具体实现,承担了脚本执行和 UI 展示的双重职责。在脚本执行侧,它通过 IPresentationScriptExecutor 接口接收 UDialogPresentationSubsystem 的脚本调用,使用 ExecuteScript 启动脚本、ProcessScript 逐条执行命令、ExecuteNextScript 控制流程跳转。在 UI 管理侧,它通过 SummonChoiceButtons 动态生成选项按钮、SetNextScript 设置跳转目标、Get_MainText_Text 绑定主文本显示。这种双职责设计使一个 Widget 即可完成从数据到显示的完整链路。
## 职责范围
WBP_TestUI 负责演示脚本的接收和执行、对话 UI 的生成和更新、脚本流程控制(跳转、选项分支)。命令的具体实现由 IPresentationStrategyPlugin 处理DataTable 管理由 UDialogPresentationSubsystem 负责。
## 项目内依赖
| 依赖项 | 关系 | 源文件 |
|--------|------|--------|
| FDialogPresentationScriptData | 输入数据 | Dialog 插件 |
| FDialogPresentationScriptCommand | 输入数据 | Dialog 插件 |
| IPresentationScriptExecutor | 实现接口 | Dialog 插件 |
| UDialogPresentationSubsystem | 调用 | Dialog 插件 |
## 外部视角
WBP_TestUI 是 UserWidget 的子类,实现 IPresentationScriptExecutor 接口,从外部调用者视角:
**公开属性(蓝图可读写)**
- `NextScriptName`FName— 下一条要执行的脚本名称
- `Sky`Ultra_Dynamic_Sky_C*)— 超动态天空引用,用于环境变化命令
**实现接口IPresentationScriptExecutor**
- `ExecuteScript(FDialogPresentationScriptData InScript)` — 启动一条演示脚本
- `ProcessScript(FDialogPresentationScriptCommand Presentation)` — 逐条解析并执行脚本命令
- `ExecuteNextScript(FName Name)` — 跳转到指定名称的脚本段
**UI 管理函数**
- `SummonChoiceButtons(FDialogPresentationScriptData Data)` — 动态生成对话选项按钮WBP_ChoiceButton
- `SetNextScritp(FDialogPresentationScriptData Data)` — 设置下一条脚本的目标
- `Get_MainText_Text()``FText` — 绑定主文本显示
**EventGraph 事件**
| 事件 | 类型 | 触发时机 | 行为 |
|------|------|----------|------|
| `事件预构造` | 原生覆盖 (PreConstruct) | Widget 在蓝图编辑器中放置或运行时创建时 | 预留(当前无连线逻辑) |
| `事件构造` | 原生覆盖 (Construct) | Widget 创建完成后 | 预留(当前无连线逻辑) |
| `事件Tick` | 原生覆盖 | 每帧 | 预留(当前无连线逻辑) |
| `事件ExecutePresentationScript` | 接口事件 (IPresentationScriptExecutor) | UDialogPresentationSubsystem 调用时 | 接收 FDialogPresentationScriptData → 调用 ExecuteScript 启动脚本执行 |
| `On Clicked (Next)` | 组件绑定事件 | 用户点击"下一步"按钮时 | 读取 NextScriptName → 调用 ExecuteNextScript 跳转脚本 |
**外部交互方式**
- 由 UDialogPresentationSubsystem 创建并调用 ExecuteScript
- 通过 IPresentationScriptExecutor 接口与 Dialog 插件通信
- 通过 WBP_ChoiceButton 动态生成选项按钮
## 使用方法
WBP_TestUI 在项目中的典型调用流程:
- **对话脚本执行流程** — UDialogPresentationSubsystem 加载 DataTable → 收到对话触发信号 → 调用 ExecuteScript通过接口事件 `ExecutePresentationScript`)→ WBP_TestUI 的 ProcessScript 逐条解析 JSON 命令 → 更新 MainText 显示文本
- **选项分支流程** — ProcessScript 遇到选项命令 → 调用 SummonChoiceButtons → 动态生成 WBP_ChoiceButton 并挂接到面板 → 用户选择一个选项 → 更新 NextScriptName
- **下一步跳转流程** — 用户点击"下一步"按钮 → 触发 `On Clicked (Next)` → 读取 NextScriptName → 调用 ExecuteNextScript → 跳转到 FDialogPresentationScriptData 中对应名称的脚本段
## 用例
| 引用方 | 路径 | 用途 |
|--------|------|------|
| DialogTest | `/Game/地图关卡/DialogTest` | 在该关卡中执行对话演示脚本 |