Files
loneseDocument/Plugins/Dialog/IPresentationScriptExecutor.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

65 lines
3.9 KiB
Markdown
Raw 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.
# IPresentationScriptExecutor
## 基本信息
- **类型**: UINTERFACE + C++ 接口
- **父类**: UInterface
- **源文件**: Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h
- **模块**: Dialog
## 功能概述
对话表现系统的协调器接口。方法ExecutePresentationScript运行脚本、PlugStrategyIn/UnplugStrategy按名称管理策略注册表。所有方法均为 BlueprintNativeEvent。
## 设计用意
门面/协调器模式。将"执行什么"FDialogPresentationScriptData与"谁执行"(策略插件)分离。作为接口与框架无关——可与任何 UI 系统配合使用。UDialogPresentationSubsystem 在脚本查找后调用 ExecutePresentationScript。
## 职责范围
编排对话脚本执行。管理策略插件注册表。由 UDialogPresentationSubsystem::ShowDialog 调用。不存储对话数据,也不解析 JSON。
## 项目内依赖
| 依赖项 | 关系 | 源文件 |
|--------|------|--------|
| FDialogPresentationScriptData | 前向声明(参数) | Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h:26 |
| IPresentationStrategyPlugin | 前向声明(参数) | Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h:28 |
## 对外接口
UInterface / C++ 接口,供蓝图或 C++ 类实现。作为对话表现系统的协调器/门面,负责编排脚本执行和管理策略插件注册表。所有方法均为 BlueprintNativeEvent可蓝图重写
三个方法:
- **ExecutePresentationScript** (BlueprintNativeEvent, BlueprintCallable): 接收 `const FDialogPresentationScriptData& ScriptStruct`(无返回值)。
-`UDialogPresentationSubsystem::ShowDialog` 调用。
- 实现者应解析 ScriptStruct 中的脚本数据,按顺序执行命令,将每条命令通过 CommandName 路由到已注册的 IPresentationStrategyPlugin。
- **PlugStrategyIn** (BlueprintNativeEvent, BlueprintCallable): 接收 `FName StrategyName``const TScriptInterface<IPresentationStrategyPlugin>& NewStrategy`
- 按名称注册一个策略插件。后续执行脚本时根据 CommandName 查找对应策略并调用其 PerformCommand。
- **UnplugStrategy** (BlueprintNativeEvent, BlueprintCallable): 接收 `FName StrategyName`
- 按名称注销一个策略插件。
典型实现者UI Widget如 WBP_TestUI它既是显示层也是执行协调器。
## 使用方法
在蓝图中实现此接口。典型调用链:
```cpp
// Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp:8-17
void UDialogPresentationSubsystem::ShowDialog(const TScriptInterface<IPresentationScriptExecutor> Executor, const FName StructID)
{
UObject* ExecutorObject = Executor.GetObject();
if (!ExecutorObject)
{
UE_LOG(LogTemp, Warning, TEXT("ShowDialog failed: Executor does not implement IPresentationScriptExecutor interface."));
return;
}
IPresentationScriptExecutor::Execute_ExecutePresentationScript(ExecutorObject, GetDialogPresentationScriptData(StructID));
}
```
子系统查找脚本数据、注入 ScriptID 后,通过 `Execute_ExecutePresentationScript` 静态方法调用蓝图实现的接口函数。
## 用例
| 文件 | 行号 | 用途 |
|------|------|------|
| Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h | 19-31 | 接口定义UInterface 包装类 + C++ 接口类含三个方法声明 |
| Plugins/Dialog/Source/Dialog/Public/DialogPresentationSubsystem.h | 32 | UDialogPresentationSubsystem::ShowDialog 以此接口的 TScriptInterface 为参数 |
| Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp | 8-17 | ShowDialog 实现:先校验接口,再调用 Execute_ExecutePresentationScript |
| Plugins/Dialog/Source/Dialog/Private/PresentationScriptExecutor.cpp | 6 | 接口默认实现占位文件 |
| Document/Content/Blueprints/WBP_TestUI.md | 10 | WBP_TestUI蓝图 Widget实现此接口接收并执行脚本