UE4 运行时间导入外部CSV文件

UE4 运行时间导入外部CSV文件

由于引擎不支持仅使用Blueprints进行文件读写操作,因此我们将公开内置的File Helper函数,用于将文本文件从C ++读取到Blueprints,即使用编写C++类Blueprint Function Library来实现该功能。

  1. 新建C++类
    File -> New C++ class
    选择Blueprint Function Library,命名为LoadCsvFile

  2. 创建完成后会自动唤醒Visual Studio(如果之前配置好VS的话)

  3. 首先写好结构并编译
    (1)以如下circle.csv文件的结构为例
    在这里插入图片描述

(2)在LoadCsvFile.h中加入#include "Engine/DataTable.h"头文件与USTRUCT结构,代码如下:

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "LoadCsvFile.generated.h"

/**
 * 
 */
USTRUCT(BlueprintType)
struct FData : public  FTableRowBase
{
	GENERATED_USTRUCT_BODY()
public:

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		float InstanceX;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		float InstanceY;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		float NewX;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		float NewY;
};

UCLASS()
class MYPROJECT6_API ULoadCsvFile : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	
};

(3)在UE4中编译(注意先编译)

  1. 在UCLASS中加入Blueprint函数
UCLASS()
class MYPROJECT6_API ULoadCsvFile : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
		UFUNCTION(BlueprintCallable, meta = (DisplayName = "LoadExcel", Keywords = "LoadExcel"), Category = "Custom")
			static TArray<FData> DataReadExcelFunction(FString name, int lie = 3);
};
  1. LoadCsvFile.cpp中加入代码
#include "LoadCsvFile.h"
#include "Misc/FileHelper.h"
#include "Misc/Paths.h"
#include "Serialization/Csv/CsvParser.h"

TArray<FData> ULoadCsvFile::DataReadExcelFunction(FString name, int lie )
{
	FString csvFile = FPaths::GameDir() + name + ".csv";
	TArray<FData> csvContent;
	if (FPaths::FileExists(csvFile))
	{
		FString FileContent;
		//Read the csv file  
		FFileHelper::LoadFileToString(FileContent, *csvFile);
		FCsvParser* csvfiles = new FCsvParser(FileContent);
		//csvfiles.
		TArray<FString> t_str;
		TArray<TArray<const TCHAR*>> content = csvfiles->GetRows();
		for (TArray<const TCHAR*>& ite : content)
		{
			for (const TCHAR*& chr : ite)
			{
				//aa.Append(chr);
				t_str.Add(chr);
			}
		}

		int key = 0;
		for (int i = 0; i < t_str.Num(); i++)
		{
			if (i % lie == 0)
			{
				if (key != 0)
				{
					FData tempdata;
					tempdata.InstanceX = FCString::Atof(*t_str[i + 1]);
					tempdata.InstanceY = FCString::Atof(*t_str[i + 2]);
					tempdata.NewX = FCString::Atof(*t_str[i + 3]);
					tempdata.NewY = FCString::Atof(*t_str[i + 4]);
					csvContent.Add(tempdata);
				}
				key++;
			}
		}
		return csvContent;

	}
	else {
		return csvContent;
	}
}

6.在UE4中重新编译完成后,重启UE4
7.在关卡蓝图中测试:
修改name为circle,修改lie为5,注意.csv文件放在content同目录
在这里插入图片描述

在这里插入图片描述

8.Play后按Num 1键即可输出文件中内容。
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UE4中可以通过使用CSV文件写入功能来保存和读取数据。CSV文件是一种纯文本格式,用逗号或其他字符分隔不同的字段。 要将数据写入CSV文件,首先需要创建一个CSV字符串,将要写入的数据按照特定的格式组织。例如,假设要写入一个包含姓名、年龄和性别的表格,可以使用如下格式的CSV字符串: "姓名,年龄,性别\n" "张三,20,男\n" "李四,25,女\n" 接下来,可以使用UE4中的FFileHelper类的静态函数SaveStringToFile()来将CSV字符串保存到磁盘上的文件中。该函数有两个参数,第一个参数是要保存的CSV字符串,第二个参数是要保存到的文件路径。例如: FFileHelper::SaveStringToFile(CSVString, *FilePath); 这样,CSV文件就会被写入到指定的文件路径中。 要从CSV文件中读取数据,可以使用UE4中的FFileHelper类的静态函数LoadFileToString()来将文件中的内容读取为一个字符串。该函数有一个参数,即要读取的文件路径。例如: FString CSVString; FFileHelper::LoadFileToString(CSVString, *FilePath); 接下来,可以使用CSV解析库(如libcsv)来解析读取到的CSV字符串,将其转换为适合处理的数据结构,例如数组或结构体。 总结而言,UE4中可以通过创建CSV字符串并使用FFileHelper类的SaveStringToFile()函数将数据写入CSV文件,也可以使用FFileHelper类的LoadFileToString()函数将CSV文件中的数据读取为字符串。读取到的字符串可以使用CSV解析库解析为合适的数据结构,进而进行处理和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值