UE4 用C++类与蓝图交互 写入文件浅析

用虚幻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盘

果然有了这个文件,而且输出和想象的一致



  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值