UE5 文字游戏(2) C++实时读取CSV文件(游戏开始读取本地CSV剧本)

1.结构体代码

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "MyCharacterStats.generated.h"


USTRUCT(BlueprintType)
struct FMyCharacterStats : public FTableRowBase
{   
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    FString Name;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Health;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 Attack;
};

2.写一个C++蓝图函数库

.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Misc/Paths.h"
#include "Serialization/Csv/CsvParser.h"
#include "Misc/FileHelper.h"
#include "MyCharacterStats.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"

/**
 * 
 */
UCLASS()
class WEBH5_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
public:
	UFUNCTION(BlueprintCallable,Category="Data")
	static TArray<FMyCharacterStats> LoadCSVData(const FString& CSVFilePath);
	/*UDataTable* LoadCSVData(const FString& CSVFilePath, TArray<FMyCharacterStats>& DataTable);*/
};

.cpp 

// Fill out your copyright notice in the Description page of Project Settings.


#include "MyBlueprintFunctionLibrary.h"

TArray<FMyCharacterStats> UMyBlueprintFunctionLibrary::LoadCSVData(const FString& CSVFilePath)
{
	TArray<FMyCharacterStats> outStats;
	FString CSVContent;
	if(!FFileHelper::LoadFileToString(CSVContent,*CSVFilePath))
		return outStats;
	const FCsvParser Parser(CSVContent);
	const FCsvParser::FRows& Rows = Parser.GetRows();

	for (int32 RowIndex = 1; RowIndex < Rows.Num(); RowIndex++) {
		FMyCharacterStats TempStats;
		TempStats.Name = Rows[RowIndex][0];
		TempStats.Attack = FCString::Atoi(Rows[RowIndex][1]);
		TempStats.Health = FCString::Atoi(Rows[RowIndex][2]);

		outStats.Add(TempStats);
	}
	return outStats;
}