Unreal 数据 - DataTable
创建结构体
USTRUCT(BlueprintType)
struct FItemIconData :public FTableRowBase
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(EditAnywhere)
FString ItemName;
UPROPERTY(EditAnywhere)
UTexture* IconTex;
};
配置数据
蓝图配置
使用ini配置
UDeveloperSettings
- UCLASS 宏标记解析:
- Config - 将变量暴露至到上面指定的ini配置文件里,如
Config = game就是记录在 DefaultGame.ini。 - defaultconfig - 仅将对象配置保存到默认ini,而不是
项目目录 - Saved - Config里面的那些ini。
- UPROPERTY 宏标记解析:
- Config - 这个变量将被配置,当前值可以保存到与类关联的.ini文件中,并在创建时加载,无法在默认属性中给出值,意味着ReadOnly。
- EditAnywhere - 将变量暴露至项目设置(Edit - ProjectSettings)窗口。
- BlueprintReadOnly - 蓝图里可读。
- Category - 指定在Blueprint编辑工具中显示的属性的类别,使用|定义嵌套层级。
- AdvancedDisplay - 属性在"详细信息"面板的高级下拉列表中。
UCLASS(Config = Game, defaultconfig, meta=(DisplayName = "DataTable Settings"))
class TTD_API UDataTableSettings : public UDeveloperSettings
{
GENERATED_BODY()
public:
UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category = "General", AdvancedDisplay)
TSoftObjectPtr<UDataTable> DT_ItemIconInfo;
};
DefaultGame.ini
[/Script/(项目名称).(继承UDeveloperSettings的类名)]
(类中声明的变量名称) = (数据表的引用路径)
[/Script/MyProject.DataTableSettings]
DT_ItemIconInfo = /Game/DataTale/ItemIconData.ItemIconData
加载
动态加载 LoadObject
UDataTable* DataTable = LoadObject<UDataTable>(this, TEXT("..."));
加载ini配置的DataTable
const UDataTableSettings* Settings = GetDefault<UDataTableSettings>();
UDataTable* DataTable = Settings->DT_ItemIconInfo.Get();
读取
FindRow
FItemIconData* UserInfo = DataTable->FindRow<FItemIconData>(RowName, "");
遍历
GetRowNames
if(DataTable)
{
for (FName RowName : DataTable->GetRowNames())
{
FItemIconData* ItemIconData = DataTable->FindRow<FItemIconData>(RowName, "");
}
}
GetRowMap
if (DataTable)
{
for (auto Iter : DataTable->GetRowMap())
{
FString RowName = (it.Key).ToString();
FItemIconData* ItemIconData = (FItemIconData*)it.Value;
}
}