# 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` | 在该关卡中执行对话演示脚本 |