57 lines
3.3 KiB
Markdown
57 lines
3.3 KiB
Markdown
# IPresentationStrategyPlugin
|
||
|
||
## 基本信息
|
||
- **类型**: UINTERFACE + C++ 接口
|
||
- **父类**: UInterface
|
||
- **源文件**: Plugins/Dialog/Source/Dialog/Public/PresentationStrategyPlugin.h
|
||
- **模块**: Dialog
|
||
|
||
## 功能概述
|
||
用于处理对话表现命令的策略接口。单一方法 PerformCommand 接收 FDialogPresentationScriptCommand,返回 bool(true 表示已处理)。BlueprintNativeEvent,支持蓝图实现。
|
||
|
||
## 设计用意
|
||
策略模式,支持多个独立的对话表现插件。一个策略处理 "SetSpeaker",另一个处理 "PlayAnimation"。布尔返回值支持回退路由。可扩展——新的表现能力只需添加新策略,无需修改核心代码。
|
||
|
||
## 职责范围
|
||
处理特定命名命令。按名称注册到 IPresentationScriptExecutor 中。不管理策略注册表,也不编排执行流程。
|
||
|
||
## 项目内依赖
|
||
| 依赖项 | 关系 | 源文件 |
|
||
|--------|------|--------|
|
||
| FDialogPresentationScriptCommand | 参数类型 | Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h |
|
||
|
||
## 对外接口
|
||
UInterface / C++ 接口,供蓝图或 C++ 类实现,用于处理特定命名类别的对话脚本命令。
|
||
|
||
单一方法:
|
||
- **PerformCommand** (BlueprintNativeEvent, BlueprintCallable): 接收 `const FDialogPresentationScriptCommand& InCommand`,返回 `bool`。
|
||
- 返回 `true` 表示该策略识别并成功处理了此命令。
|
||
- 返回 `false` 表示未处理(可用于回退路由链)。
|
||
|
||
设计模式:策略模式。每个策略实现负责一个命令名称空间(如 "SetSpeaker"、"PlayAnimation")。策略通过 `IPresentationScriptExecutor::PlugStrategyIn` 按名称注册到执行器。执行器根据 `CommandName` 将命令路由到对应策略。
|
||
|
||
注意:策略自身不管理注册,不决定何时被调用。注册和调度由实现 `IPresentationScriptExecutor` 的类负责。
|
||
|
||
## 使用方法
|
||
在 C++ 或蓝图中实现此接口。蓝图中可 override `PerformCommand` 事件:
|
||
|
||
1. 检查 `InCommand.CommandName` 是否为自己能处理的命令。
|
||
2. 读取 `InCommand.Params`,按 Type 字段分发读取正确的值。
|
||
3. 执行相应的游戏逻辑(设置角色、播放动画等)。
|
||
4. 返回 `true` 表示已处理,或 `false` 表示不处理。
|
||
|
||
策略类通过执行器的 `PlugStrategyIn(StrategyName, StrategyObject)` 注册自身:
|
||
```cpp
|
||
// Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h:28
|
||
void PlugStrategyIn(FName StrategyName, const TScriptInterface<class IPresentationStrategyPlugin>& NewStrategy);
|
||
```
|
||
|
||
## 用例
|
||
| 文件 | 行号 | 用途 |
|
||
|------|------|------|
|
||
| Plugins/Dialog/Source/Dialog/Public/PresentationStrategyPlugin.h | 19-27 | 接口定义:UInterface 包装类 + C++ 接口类含 PerformCommand 声明 |
|
||
| Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h | 28 | IPresentationScriptExecutor::PlugStrategyIn 以此接口的 TScriptInterface 为参数 |
|
||
| Document/Content/Blueprints/WBP_TestUI.md | 10 | WBP_TestUI 实现 IPresentationScriptExecutor,负责将命令分发给对应的策略插件 |
|
||
|
||
注:`PerformCommand` 在 Dialog 插件源码中仅有声明(PresentationStrategyPlugin.h:26),无 C++ 调用实现;调用发生在实现 `IPresentationScriptExecutor` 的蓝图/运行时中。搜索 `PerformCommand` 仅匹配到接口声明行。
|