UE4读取本地XML文件

news2024/11/25 15:52:41

关键词: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,成功打印
在这里插入图片描述

祝你成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023级浙江大学MBA提前批面试真题及经验分享

前段时间获得了浙大MBA项目拟录取资格&#xff0c;在跟易考周老师报喜的同时也很荣幸收到了分享提前批面试经验的邀请&#xff0c;现在也4月中旬了&#xff0c;马上浙大MBA提面第一批次就要开始了&#xff0c;根据我的经验来说&#xff0c;参加浙大前三批提面拿优秀的概率会更高…

移动App测试实战—专项测试

移动App测试实战—专项测试 我们在进行了手工的功能测试之后&#xff0c;也开发了一些自动化测试用例&#xff0c;并且做了性能测试之后&#xff0c;测试工作看似比较完整了。但是当我们的App在大量的用户那里被安装和使用的时候&#xff0c;还是会有很多我们之前没有预料的问题…

【C++】STL——用一颗红黑树封装出map和set

用一颗红黑树封装出map和set 文章目录用一颗红黑树封装出map和set一、前言二、红黑树模板参数的控制三、模板参数中仿函数的增加四、红黑树正向迭代器的实现五、红黑树的反向迭代器的实现六、红黑树的begin()和end()七、红黑树的rbegin()和rend()八、[ ]下标访问运算符重载九、…

java ssm人力资源系统Y3程序

1&#xff0e;系统登录&#xff1a;系统登录是员工访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括员工名、密码和验证码&#xff0c;然后对登录进来的员工判断身份信息&#xff0c;判断是管理员还是普通员工。 2&#xff0e;系统员工管理&#xff1a;不管是超级…

深入剖析:如何优化Android应用的性能和内存管理

深入剖析&#xff1a;如何优化Android应用的性能和内存管理 性能和内存管理的重要性 在今天的移动应用开发中&#xff0c;用户对于应用的性能和体验要求越来越高。一款性能卓越的Android应用能够提供流畅的操作体验、快速的响应速度以及较低的资源消耗&#xff0c;从而提高用户…

26《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

​《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第六章&#xff1a;The principles of protein folding kinetics &#xff08;蛋白质折叠动力学的原理&#xff09; -速率测量有助于深入了解蛋白…

高级数据结构与算法 | 基数树(Radix Tree)

文章目录RadixTree基本概念概念Radix Tree VS Trie Tree应用场景实现数据结构插入删除查找完整代码RadixTree 基本概念 概念 如果对 Trie 不太了解&#xff0c;可以看看我的往期博客&#xff1a; https://oreki.blog.csdn.net/article/details/109076473 Radix Tree是一种基于…

[HNCTF 2022 Week1]Challenge__rce

1.打开环境。 查看源码传入hint获得源码。 <?php error_reporting(0); if (isset($_GET[hint])) {highlight_file(__FILE__); } if (isset($_POST[rce])) {$rce $_POST[rce];if (strlen($rce) < 120) {if (is_string($rce)) {if (!preg_match("/[!#%^&*:\-&…

采集工具如何帮助SEO优化关键词

随着互联网的发展&#xff0c;越来越多的企业开始意识到SEO优化对于企业的重要性。SEO优化可以帮助企业提高网站在搜索引擎中的排名&#xff0c;进而吸引更多的潜在客户。而关键词则是SEO优化的核心&#xff0c;如何找到合适的关键词&#xff0c;成为了企业优化的关键。在这里&…

ActiveMQ使用(三):在JavaScript中使用mqttws31.js

ActiveMQ使用(三):在JavaScript中使用mqttws31.js 1. 环境准备 jQuery-1.10 下载地址:https://www.jsdelivr.com/package/npm/jquery-1.10.2?tabfilesmqttws31.js: 下载地址:https://www.jsdelivr.com/package/npm/ng2-mqtt 2. 相关代码 <!DOCTYPE html> <html …

【GPT4】微软 GPT-4 测试报告(3)GPT4 的编程能力

欢迎关注【youcans的GPT学习笔记】原创作品&#xff0c;火热更新中 微软 GPT-4 测试报告&#xff08;1&#xff09;总体介绍 微软 GPT-4 测试报告&#xff08;2&#xff09;多模态与跨学科能力 微软 GPT-4 测试报告&#xff08;3&#xff09;GPT4 的编程能力 【GPT4】微软 GPT-…

在线绘制思维导图

思维导图是一种可视化的思维工具&#xff0c;它可以将放射性思考具体化为可视的图像和图表。 思维导图利用图文并重的技巧&#xff0c;把各级主题的关系用相互隶属与相关的层级图表现出来&#xff0c;把主题关键词与图像、颜色等建立记忆链接。 它运用图像和颜色等多种元素&…

ctf做题记录本

2023年3月16日 1.XXE漏洞 没做出来&#xff0c;bp上怎么不显示结果 https://blog.csdn.net/weixin_43553654/article/details/107760067?spm1001.2101.3001.6650.5&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-5-107760067-blo…

Java线上监控诊断产品Arthas

最近一直在研究Java的动态追踪技术&#xff0c;碰到了Arthas&#xff0c;正好以前也想学&#xff0c;趁此机会就了解了一下。 什么是Arthas&#xff1f;首先我们看看Arthas官方文档是怎么描述的&#xff1a; 什么是Arthas Arthas 是一款线上监控诊断产品&#xff0c;通过全局…

欧拉函数及其线性筛

一&#xff0c;定义 欧拉函数是对于n小于或者等于他的数中与n互质的数的个数。一般用φ(x)表示。 二&#xff0c;欧拉函数公式 其中pi为n的所有质因数。 公式的理解方法可以是pi是与n互质的数&#xff0c;那么它&#xff08;包括它的倍数&#xff09;在1~n里面是均匀出现的&…

分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?

所有的资源管理系统都需要解决资源的有效利用、任务的有效响应、调度策略的灵活配置这三个最基本问题。那么在分布式的场景下&#xff0c;YARN和Kubernetes是怎么解决的呢&#xff1f;本篇进行介绍。 — Apache YARN — YARN全称为&#xff08;Yet Another Resource Negotiato…

OSPF开放式最短路径优先协议

目录标题OSPF协议OSPF的数据包---5种OSPF的状态机OSPF的工作过程OSPF的基本配置关于ospf协议从邻居建立成为邻接的条件ospf的接口网络类型OSPF协议 是是无类别链路状态型IGP协议&#xff1b;由于其基于拓扑进行更新收敛&#xff0c;故更新量会随着拓扑的变大而呈指数上升&…

处理CSV(python)

处理CSV&#xff08;python&#xff09;简介1. CSV和Python简介2. 文章内容简介一、用csv模块读取和写入CSV文件1. CSV模块2. 示例二、用pandas库读取和写入CSV文件1. pandas2. 示例三、处理CSV文件中的特殊情况1. 特殊情况及处理方法2. 示例简介 1. CSV和Python简介 CSV是一…

动态内存管理--从动态内存分配函数开始和你一起了解

目录前言1.为什么存在动态内存分配2.动态内存函数的介绍2.1malloc函数和free函数2.2calloc函数2.3realloc函数3.常见的动态内存错误3.1对NULL指针的解引用操作3.2对动态开辟空间的越界访问3.3对非动态内存开辟的内存使用free释放3.4使用free释放一块动态内存的一部分3.5对同一块…

【致敬未来的攻城狮计划】— 连续打卡第三天:欲速则不达,今天是对RA2E1 基础知识的补充学习。

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 文章目录 目录 系列文章目录 文章目录 前言 一、RA是什么&#xff1f; 二、RA特点…