UE4 C++读数据表格
结构体:
要继承 FTableRowBase
才可以被数据表格获取
USTRUCT(BlueprintType)
struct FST_EnemyState : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, DisplayName="序号")
int Index;
UPROPERTY(EditAnywhere, BlueprintReadWrite, DisplayName="名称")
FString Name=TEXT("敌人");
};
就选择刚创建的结构体
![在这里插入图片描述](https://img-blog.csdnimg.cn/2e14aadaa8e34c0a96b6ef9495ecf0a8.png)
数据表格添加写数据
![在这里插入图片描述](https://img-blog.csdnimg.cn/641a3f623fc142748d1537d37386eeab.png)
C++里写个函数在BeginPlay()执行就行了
UDataTable* const UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/1game/enemy/Kuluo/Table_Enemy.Table_Enemy'"));
if (UserInfoDataTable)
{
//输出所有的名称
for (FName RowName : UserInfoDataTable->GetRowNames())
{
UKismetSystemLibrary::PrintString(GetWorld(), RowName.ToString());
FST_EnemyState* TestInfo = UserInfoDataTable->FindRow<FST_EnemyState>(RowName,TEXT("Index"));
if (TestInfo)
{
UKismetSystemLibrary::PrintString(GetWorld(), TestInfo->Name);
}
}
//输出所有的名称
for (auto it : UserInfoDataTable->GetRowMap())
{
FString RowName = (it.Key).ToString();
FST_EnemyState* UserInfo = (FST_EnemyState*)it.Value;
UKismetSystemLibrary::PrintString(GetWorld(), FString::Printf(TEXT("%s %s"), *RowName, *UserInfo->Name));
}
//读一条数据
FST_EnemyState* TestInfo = UserInfoDataTable->FindRow<FST_EnemyState>(TEXT("2"),nullptr);
if (TestInfo)
{
UKismetSystemLibrary::PrintString(GetWorld(), TestInfo->Name);
}
}
else
{
UKismetSystemLibrary::PrintString(GetWorld(), TEXT(" Not Find DataTable!"));
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/4049d85f3cdd40f2b88ec004b23f63cf.png)