标签:CSVPath TEXT UserInfoDataTable C++ Json UserInfo DataDrive UE4 DT
Datatable 读取行数据
1. 创建结构体
-
继承自 FTableRowBase
USTRUCT(BlueprintType) struct FSimpleStruct :public FTableRowBase { GENERATED_USTRUCT_BODY() public: UPROPERTY(EditAnywhere) FString name; UPROPERTY(EditAnywhere) int32 health; UPROPERTY(EditAnywhere) UTexture2D* icon; };
2. 创建 Datatable
-
选择 FSimpleStruct 结构体
3. 读取行数据
-
FindRow
UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'")); if (UserInfoDataTable) { for (FName RowName : UserInfoDataTable->GetRowNames()) { FSimpleStruct* UserInfo = UserInfoDataTable->FindRow<FSimpleStruct>(RowName, TEXT("name")); if (UserInfo) { UKismetSystemLibrary::PrintString(GetWorld(), UserInfo->name); } } } else { UKismetSystemLibrary::PrintString(GetWorld(), TEXT(" Not Find DataTable!")); }
-
GetRowMap
UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'")); if (UserInfoDataTable) { for (auto it : UserInfoDataTable->GetRowMap()) { FString RowName = (it.Key).ToString(); FSimpleStruct* UserInfo = (FSimpleStruct*)it.Value; UKismetSystemLibrary::PrintString(GetWorld(), FString::Printf(TEXT("%s %s"), *RowName, *UserInfo->name)); } }
Datatable 写入行数据
-
AddRow
UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'")); if (UserInfoDataTable) { FSimpleStruct* UserInfo = new FSimpleStruct(); UserInfo->name = TEXT("Lily"); UserInfo->health = 80; FName RowName = TEXT("Player3"); UserInfoDataTable->AddRow(RowName, *UserInfo); }
导入CSV
-
csv 文件
---,name,health,icon Player4,"马克","200","Texture2D'/Game/FourEvilDragonsHP/Textures/DragonTheUsurper/BlueHPTex.BlueHPTex'" Player5,"冉冰","90","Texture2D'/Game/FourEvilDragonsHP/Textures/DragonTheSoulEater/BlueHPTex.BlueHPTex'" Player6,"墨城","150","None"
-
填充现有的 DataTable
UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'")); if (UserInfoDataTable) { FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo.csv"); CSVPath = FPaths::ConvertRelativePathToFull(CSVPath); if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*CSVPath)) { UDataTableFunctionLibrary::FillDataTableFromCSVFile(UserInfoDataTable, CSVPath); } }
-
生成 UDataTable
UDataTable* ADataDriveActor::CreateDataTableFromCSV() { FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo.csv"); CSVPath = FPaths::ConvertRelativePathToFull(CSVPath); if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*CSVPath)) { UKismetSystemLibrary::PrintString(GetWorld(), *CSVPath); FString CSVData; FFileHelper::LoadFileToString(CSVData, *CSVPath); UDataTable* DT_UserInfo = NewObject<UDataTable>(GetTransientPackage(), FName(TEXT("DT_UserInfo2"))); DT_UserInfo->RowStruct = FSimpleStruct::StaticStruct(); DT_UserInfo->CreateTableFromCSVString(CSVData); return DT_UserInfo; } return nullptr; }
导出 CSV
-
GetTableAsCSV
UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'")); if (UserInfoDataTable) { FString CSVString = UserInfoDataTable->GetTableAsCSV(); FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo2.csv"); FFileHelper::SaveStringToFile(CSVString, *CSVPath, FFileHelper::EEncodingOptions::ForceUTF8); }
导入导出Json
省略
标签:CSVPath,TEXT,UserInfoDataTable,C++,Json,UserInfo,DataDrive,UE4,DT 来源: https://www.cnblogs.com/shiroe/p/14745783.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。