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

4.9 KiB
Raw Permalink Blame History

UPresentationJsonLibrary

基本信息

  • 类型: UCLASSBlueprintFunctionLibrary
  • 父类: 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。

已知 bugGetPresentationScriptChoicesNumGetPresentationScriptCommandsNum 的实现都解析了 Data.Choices 而非分别解析 Choices 和 PresentationScript参见 DialogPresentationScript.cpp:14DialogPresentationScript.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