当前位置: 首页 > article >正文

【UE5 C++课程系列笔记】17——DeveloperSettings(开发者设置)的基本使用——读取修改Settings

前言

        在上一篇(16——DeveloperSettings(开发者设置)的基本使用——创建配置文件)基础上继续介绍如何在C++中读取修改Settings。

步骤

一、获取配置项的值 

1. 在“SampleSettings.h”中新增声明名为“AppID”和“AppKey”的变量,其中UPROPERTY 宏中的参数Config表示这两个成员变量会参与到项目的配置管理中,其值可被保存到项目配置文件中并在需要时重新加载出来。

此时编译后可以看到在“项目设置-》Test-》Sample Settings”中多了两个配置项

接下来我们在另一个Actor中获取和修改配置项“AppID”和“AppKey”的值

2. 新建一个Actor类,这里命名为“ConfigActor”

在“ConfigActor.h”中定义一个名为“GetMyAppKey”的函数,用于获取配置项“AppKey”的值

函数“GetMyAppKey”的实现如下,该函数将获取到的配置项“AppKey”的值赋给引用参数 OutMyAppKey。如果成功获取到有效的 AppKey,函数返回 true;若获取实例失败或者实例中 AppKey 变量无值,则将 OutMyAppKey 设置为默认值 "None" 并返回 false

3. 编译后创建派生自“ConfigActor”的蓝图类“BP_ConfigActor”

打开“BP_ConfigActor”,在事件BeginPlay时打印“OutMyAppKey”

4. 将“BP_ConfigActor”拖入视口

5. 在项目设置中,修改配置项“AppKey”的值

此时运行,可以看到成功打印了配置项“AppKey”的值

配置文件“DefaultSampleSetting.ini”中也成功记录了配置项“AppKey”的值。

另外,蓝图提供了可以访问配置项的节点“GetClassDefault”

 

二、修改配置项的值

 在“ConfigActor.h”中新增一个函数“SetMyAppKey”,用于设置配置项“AppKey”的值。函数“SetMyAppKey”接收一个 FString 类型的常量引用参数 InMyAppKey,该参数表示要设置的新的AppKey的值

函数“SetMyAppKey”的实现如下。先尝试获取对应的 USampleSettings 类实例,如果获取成功,就将传入的新应用密钥值赋给该实例中的 AppKey 变量,并且函数返回 true 表示设置成功;若获取实例失败,则直接返回 false。

编译后在“BP_ConfigActor”的事件图表中调用“SetMyAppKey”

运行后,可以看到项目设置中的配置项“AppKey”的值被修改了

但是修改后的值并没有保存到“DefaultSampleSettings.ini”中

我们还需要添加如下3行代码,将项目设置中的配置项信息保存到配置文件中 。其中调用 SampleSetting->Modify() 是为了标记当前的 USampleSettings 实例中的配置已经被修改,通过调用这个函数告知系统该实例的配置状态发生了变化,后续在保存配置时会根据这个标记来确定哪些配置信息需要被持久化存储,确保只有真正修改过的配置才会被保存,避免不必要的存储操作;

FString ConfigPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectConfigDir() / TEXT("DefaultSampleSettings.ini")); 这行代码用于获取配置文件的完整路径,FPaths::ProjectConfigDir() 用于获取项目配置目录的路径,然后通过 / 运算符(在UE中重载了用于拼接路径的功能)与 TEXT("DefaultSampleSettings.ini") 进行拼接,得到配置文件相对的路径表示,最后FPaths::ConvertRelativePathToFull 函数将相对路径转换为完整的绝对路径;

SaveConfig 函数是 USampleSettings 类提供的用于保存配置信息的方法,参数 CPF_Config 是一个配置文件保存的相关标志,第二个参数 *ConfigPath 通过解引用操作将之前获取到的配置文件的完整路径字符串传递进去,使得配置信息能够准确地保存到指定的 DefaultSampleSettings.ini 文件中,确保更新后的“AppKey”信息得以持久化。

编译后,此时运行可以看到不仅项目设置中的配置项“AppKey”的值被成功修改,而且修改后的值也成功保存到配置文件中。


http://www.kler.cn/a/466241.html

相关文章:

  • 【Vim Masterclass 笔记08】第 6 章:Vim 中的文本变换及替换操作 + S06L20:文本的插入、变更、替换,以及合并操作
  • Python入门教程 —— 模块和包
  • 2025/1/1 路由期末复习作业二
  • 探索AI在地质科研绘图中的应用:ChatGPT与Midjourney绘图流程与效果对比
  • 32单片机从入门到精通之软件编程——中断处理(九)
  • 我们公司只有3个人,一个前端,一个后端
  • 初步认识UML
  • 动态库dll与静态库lib编程3:DLL导出函数的调用
  • 深度学习笔记10-数据增强(Tensorflow)
  • 在Vue3项目中使用svg-sprite-loader
  • Gitee 的基本用法
  • 查看打开的端口
  • 【JavaWeb后端学习笔记】MySQL的数据控制语言(Data Control Language,DCL)
  • 多线程访问FFmpegFrameGrabber.start方法阻塞问题
  • SkyWalking概述
  • 谷歌浏览器的高级安全设置使用方法
  • 整数拼接(哈希表 枚举)
  • docker基本概念,docker镜像管理,docker命令
  • zookeeper+kafka
  • 深入剖析MySQL数据库架构:核心组件、存储引擎与优化策略(四)
  • matlab系列专栏-matlab概述
  • xdoj 出现次数最多的数
  • WPF 数据绑定中的通知机制及其性能考虑
  • Android多渠道打包【友盟方式详细讲解版】
  • 《Opencv》基础操作详解(4)
  • python实现,outlook每接收一封邮件运行检查逻辑,然后发送一封邮件给指定邮箱