顺序
- 准备一个Excel表,保存为.CSV文件
- 在UE4中写一个struct
- 把CSV文件导入为DataTable,数据结构保存为上一步写的Struct
- 对DataTable进行操作
Ps:我使用的是Rider编译器,关于更多对DataTable操作在这里
1.新建一个Excel表格保存为.CSV文件
2.右键新建一个Struct
3,编写代码 testCSV.h
#pragma once
#include "Engine/DataTable.h"
#include "CSVstruct.generated.h"
USTRUCT(BlueprintType)
struct FCSVstruct:public FTableRowBase
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=HxUserInfo)
FString Type;
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=HxUserInfo)
int Id;
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=HxUserInfo)
int Level;
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category=HxUserInfo)
FString Name;
};
4,保存后编译,进入游戏引擎,将CSV文件拖入界面,选择为DataTable,下面为TestCSV,点击OK后出现一个CSV文件
5,使用CSV文件,编写代码,随便在哪个脚本的BeginPlay()中测试一下
#include "MyActor.h"
#include "testCSV.h"
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
FStringAssetReference CsvName("/Game/Table/testCSV");
UDataTable* test = Cast<UDataTable>(CsvName.TryLoad());
FTestCSV testData;
FString ContextString;
testData.Id=2;
testData.Level=2;
testData.Name="darkness";
testData.Type="Pop";
//增加
test->AddRow("A2",testData);
//查询
FTestCSV*findout = test->FindRow<FTestCSV>("A0",ContextString);
if(findout)
{
UE_LOG(LogTemp,Warning,TEXT("Find test ID %d"),findout->Id);
}else
{
UE_LOG(LogTemp,Warning,TEXT("not Find test ID"));
}
//改值
findout->Id = 5;
//删除
test->RemoveRow("A1");
}