用虚幻4写入文件的操作
折腾了一天半,翻了很多教程,有的老哥也讲了很多让人获益的知识,但没有一个教程能实实在在的把这个东西讲通透,翻过了不少坑,终于把文件在硬盘里写了进去,也算是功夫不负有心人,下面来讲解一下。
首先虚幻4作为一款用C++写的游戏引擎,并且开源支持C++对代码的重构,对语言的支持也是势在必行,如果要进行重度游戏的架构,肯定会涉及到登陆注册功能,那么文件读写操作,是必不可少的,现行的SaveFile蓝图可以实现,但功能太局限,就让人有了用C++自己写一个文件读写函数的想法。
C++类与蓝图的交互
要想读写文件让蓝图对数据进行操作,就必须要实现蓝图与C++的交互,查阅资料后在下用了继承BlueprintFunctionLibrary类的办法,首先在UE界面创建一个C++类,选择继承为BlueprintFunctionLibrary,点击确定,这时候可能会出现一个小坑,说是在编译之前不能预览视图,当时可把我忙坏了,但不要着急,用Vs打开项目然后重新编译启动一遍,就好了。
在头文件里添加函数
创建好这个继承自BlueprintFunctionLibrary的类以后,我们就要在自己的类的头文件里声明自己要用到的函数了
在.h文件里
UCLASS()
class FPS1_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
UFUNCTION(BlueprintCallable, Category = "Test")
static bool SaveToFile(FString Dir, FString Name, FString Text, bool Overwrite = false);
};
这次主要用到这一个函数,顾名思义,这就是保存信息到指定目录文件的函数,函数声明为static这样做是让所有的蓝图都可以使用该方法。
在.cpp文件里
#include "MyBlueprintFunctionLibrary.h"
bool UMyBlueprintFunctionLibrary::SaveToFile(FString Dir, FString Name, FString Text, bool Overwrite)
{
IPlatformFile& F = FPlatformFileManager::Get().GetPlatformFile();
if (!F.DirectoryExists(*Dir))
{
F.CreateDirectoryTree(*Dir);
if (!F.DirectoryExists(*Dir))
{
return false;
}
}
Dir += "\\";
Dir += Name;
if (!Overwrite)
{
if (F.FileExists(*Dir))
{
return false;
}
}
return FFileHelper::SaveStringToFile(Text, *Dir);
}
记得
IPlatformFile
FPlatformFileManager
FFileHelper
这三个类型都要导入相应的.h头文件在自己的头文件里,他们分别是
#include "IPlatformFileCachedWrapper.h"
#include "PlatformFileManager.h"
#include "FileHelper.h"
在下也是查了很久才查到这些东西
编译测试
编译VS工程,在编译出的UE工程里使用函数
点击编译后出现UE4工程
点击进入关卡蓝图
输入关键字以后,就会出现我们的函数
然后放置好参数和测试用的模块,点击编译,运行以后去看D盘
果然有了这个文件,而且输出和想象的一致