2.5 KiB
2.5 KiB
FHelperArray
基本信息
- 类型: USTRUCT(BlueprintType)
- 父类: (无)
- 源文件: Plugins/Dialog/Source/Dialog/Public/DialogPresentationSubsystem.h
- 模块: Dialog
功能概述
简单的包装结构体,持有 TArray。仅因 Unreal 的 TMap 无法将裸 TArray 作为 UPROPERTY 值类型而存在。用作 ChoiceTextIndex 中的 Map 值类型。
设计用意
UE 引擎限制的变通方案。将数组包装在 USTRUCT 中使其成为有效的 TMap 值类型,以满足 GC 追踪要求。无其他用途。
职责范围
技术性包装结构体。仅在 UDialogPresentationSubsystem 的 ChoiceTextIndex Map 中使用。单一 UPROPERTY 成员:TArray Data。
项目内依赖
| 依赖项 | 关系 | 源文件 |
|---|---|---|
| FDialogTextData | 包含(TArray成员) | Plugins/Dialog/Source/Dialog/Public/DialogPresentationScript.h |
对外接口
BlueprintType 结构体,纯粹的技术性包装器,唯一用途是使 TArray<FDialogTextData> 能够作为 TMap 的值类型。
唯一字段:
- Data (TArray): 被包装的 FDialogTextData 数组。
外部代码通过 UDialogPresentationSubsystem::GetChoiceTextFromMapTable 获取 TArray<FDialogTextData>,通常不会直接操作此结构体。该结构体仅在 ChoiceTextIndex 内部使用,作为 TMap<FName, FHelperArray> 的值类型。
使用方法
子系统内部索引构建时查找或创建键值对:
// Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp:120-121
FName Key = FName(*FString::Printf(TEXT("%s|%s"), *Row->Source.ToString(), *Row->Target.ToString()));
ChoiceTextIndex.FindOrAdd(Key).Data.Add(*Row);
子系统内部查询时解包数组:
// Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp:90-92
if (FHelperArray* Result = ChoiceTextIndex.Find(Key))
{
return Result->Data; // O(1) 返回
}
用例
| 文件 | 行号 | 用途 |
|---|---|---|
| Plugins/Dialog/Source/Dialog/Public/DialogPresentationSubsystem.h | 15-20 | 结构体定义,位于子系统头文件中 |
| Plugins/Dialog/Source/Dialog/Public/DialogPresentationSubsystem.h | 66 | ChoiceTextIndex 的 Map 值类型:TMap<FName, FHelperArray> |
| Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp | 90-92 | GetChoiceTextFromMapTable 中解包返回 Data 数组 |
| Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp | 121 | BuildIndexes 中通过 FindOrAdd 追加选项行到对应复合键的数组 |