4.9 KiB
UPresentationJsonLibrary
基本信息
- 类型: UCLASS(BlueprintFunctionLibrary)
- 父类: UBlueprintFunctionLibrary
- 源文件: Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h
- 模块: Dialog
功能概述
用于对话脚本 JSON 解析和序列化的静态函数库。解析 Choices JSON 数组和 PresentationScript JSON 命令数组。提供获取命令数量、指定索引处的命令名称、参数数量、指定索引处的参数的函数。同时支持将命令序列化回 JSON。所有方法均为静态 UFUNCTION。
设计用意
蓝图与 JSON 对话数据之间的桥梁。FDialogPresentationScriptData 将命令存储为原始 JSON 字符串;本库负责解析它们。BlueprintFunctionLibrary 使所有方法无需实例即可从蓝图中调用。私有辅助函数处理带正确转义的递归 JSON 值序列化。
职责范围
对话脚本的 JSON 与结构体之间的转换。将 FDialogPresentationScriptData 字段解析为类型化的访问接口。将 TArray 序列化回 JSON。不执行命令。
项目内依赖
| 依赖项 | 关系 | 源文件 |
|---|---|---|
| FDialogPresentationScriptData | 参数类型 | Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h |
| FDialogPresentationScriptCommand | 参数/返回类型 | Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h |
| FDialogPresentationScriptParam | 内部创建/解析 | Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h |
| FDialogTextData | 参数类型 | Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h |
对外接口
BlueprintFunctionLibrary,所有方法均为静态 UFUNCTION(BlueprintCallable),可从 C++ 和蓝图调用。提供两大类功能:脚本数据解析和文本数据访问。
脚本数据解析(参数均为 FDialogPresentationScriptData):
- GetPresentationScriptComment: 返回 Data.Comment(设计者注释)。
- GetPresentationScriptChoicesNum: 解析 Data.Choices JSON 数组,返回选项数量;解析失败返回 -1。
- GetPresentationScriptChoiceAt: 解析 Data.Choices,返回指定索引处的选项名称 (FName);越界或失败返回空 FName。
- GetPresentationScriptCommandsNum: 解析 Data.Choices JSON 数组,返回元素数量(注意:此函数存在已知 bug,应解析 Data.PresentationScript 而非 Data.Choices,参见
DialogPresentationScript.cpp:53)。 - GetPresentationScriptCommandName: 解析 Data.PresentationScript,返回第 Index 条命令的名称 (FName)。
- GetPresentationScriptCommandParaNum: 解析 Data.PresentationScript,返回第 Index 条命令的参数数量(总元素数减 1)。
- GetPresentationScriptCommandParaAt: 解析 Data.PresentationScript,返回第 CommandIndex 条命令的第 ParaIndex 个参数 (FDialogPresentationScriptParam)。
- BuildPresentationScriptCommandParaFromStr: 从单字符串解析 JSON 值并构建 FDialogPresentationScriptParam。
- GetPresentationScriptCommandParams: 解析 Data.PresentationScript,返回第 CommandIndex 条命令的所有参数 (TArray)。
- PresentationScriptToJson: 将命令数组反向序列化为 JSON 字符串(编辑器导出用)。
文本数据访问:
- GetDialogText: 返回 FDialogTextData 的 DialogText 字段。
- GetChoicesText: 遍历 TArray,提取每个元素的 ChoiceText 字段组成 TArray。
已知 bug:GetPresentationScriptChoicesNum 和 GetPresentationScriptCommandsNum 的实现都解析了 Data.Choices 而非分别解析 Choices 和 PresentationScript(参见 DialogPresentationScript.cpp:14 与 DialogPresentationScript.cpp:53)。调用时需注意此行为。
使用方法
在 C++ 中解析脚本命令:
int NumCommands = UPresentationJsonLibrary::GetPresentationScriptCommandsNum(ScriptData);
for (int i = 0; i < NumCommands; i++)
{
FName CmdName = UPresentationJsonLibrary::GetPresentationScriptCommandName(ScriptData, i);
TArray<FDialogPresentationScriptParam> Params = UPresentationJsonLibrary::GetPresentationScriptCommandParams(ScriptData, i);
// 根据 CmdName 分发处理...
}
在编辑器中序列化命令数组为 JSON:
// Plugins/Dialog/Source/DialogEditor/Private/DialogGraphDataAsset.cpp:478
auto ScriptString = UPresentationJsonLibrary::PresentationScriptToJson(DialogNode->PresentationScriptCommands);
用例
| 文件 | 行号 | 用途 |
|---|---|---|
| Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h | 101-145 | 类声明,包含所有公共静态方法签名 |
| Plugins/Dialog/Source/Dialog/Private/DialogPresentationScript.cpp | 6-402 | 全部方法实现:JSON 解析、参数构建、反序列化 |
| Plugins/Dialog/Source/DialogEditor/Private/DialogGraphDataAsset.cpp | 478 | 调用 PresentationScriptToJson 将编辑器命令数组序列化为 JSON |