UE C++基础 | 数据 | DataTable

文章介绍了在UnrealEngine中如何创建和配置基于结构体的DataTable,包括蓝图配置、Ini文件设置,以及如何动态加载DataTable,通过RowName查找和遍历数据。

Unreal 数据 - DataTable

创建结构体

  • 继承FTableRowBase
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

  • 通过RowName查找。
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;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flame老唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值