3.3 KiB
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 事件:
- 检查
InCommand.CommandName是否为自己能处理的命令。 - 读取
InCommand.Params,按 Type 字段分发读取正确的值。 - 执行相应的游戏逻辑(设置角色、播放动画等)。
- 返回
true表示已处理,或false表示不处理。
策略类通过执行器的 PlugStrategyIn(StrategyName, StrategyObject) 注册自身:
// 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 仅匹配到接口声明行。