关键词:UE4 UE5 Unreal Engine XML 文件 txt
需求:
游戏开发中需要读取了写入配置文件,需要保存场景信息,道具位置旋转信息,那么将其保存为XML是一个不错的办法。
涉及知识点:
怎样读取xml文件
思路
使用C++编写,使用UE4自带一个XmlParser函数,可以很方便的实现Xml的简单读写功能。
操作
1. 添加XmlParser
找到你工程下的XXXXXBuild.cs文件,双击打开。
这步很关键,很多博主不讲这个,因为太简单了,不值得提。所以初学者会被在这步卡住。
双击打开XXXXXBuild.cs文件后,在后面追加一个“XmlParser” ,如下图。如果不加这一步,后面的代码会报错,会找不到这个函数库。
2. 创建一个能读取 xml 的蓝图功能块
在UE4里,新建一个蓝图函数库,我没有将它放在gamemode或者gamestate中,因为我希望它更灵活,更便于我以后的使用。
起名叫 FileRW,意思是文件读取和写入。题外话:为啥没有叫XMLRW,将来我还想把txt文本文件的读取写入也写在这里面。
在 FileRW.h 头文件中,把这两行粘贴进去,注意位置一定要在"FileRW.generated.h"之前。
头文件完整代码:
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Runtime/XmlParser/Public/XmlParser.h"
#include "FileRW.generated.h"
/**
*
*/
UCLASS()
class AUCDISPLAY_API UFileRW : public UBlueprintFunctionLibrary
{
public:
UFUNCTION(BlueprintCallable, Category = "File", meta = (Keywords = "save xml file"))
static bool ReadXML(FString FilePathName,FString& IP);
};
效果如下图
FileRW.cpp文件完整代码
#include "FileRW.h"
bool UFileRW::ReadXML(FString FilePathName,FString& IP)
{
if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*(FPaths::ProjectDir() + FilePathName)))
{
UE_LOG(LogTemp, Warning, TEXT("Find XML File!"));
FXmlFile* file = new FXmlFile(FPaths::ProjectDir() + TEXT("XML/Setting.xml"));
FXmlNode* RootNode = file->GetRootNode();
FXmlNode* m_IP = RootNode->FindChildNode("IP");
IP = *m_IP->GetContent();
return true;
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Cannot Find XML File"));
return false;
}
}
写好后,编译。
3. 这是我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<Config>
<IP>192.168.1.1</IP>
<Port>6666</Port>
</Config>
![在这里插入图片描述](https://img-blog.csdnimg.cn/a5eccd04c0db4316b7e9bf3d494ad349.png)
4. 在蓝图中使用
现在打开UE4蓝图编辑器,给我的BP_PlayerController蓝图中添加ReadXML功能块,并使用键盘O,将获得的XML的IP打印出来。
注意这里的FilePathName,在C++中写的是 FPaths::ProjectDir() 是工程目录,如下图。
5. 测试
运行游戏,点击键盘 O,成功打印
祝你成功。